sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan returneres prøverækken fra databasen én efter én

En order by vil altid være dyrt, især hvis udtrykket i rækkefølgen efter ikke er indekseret. Så bestil ikke. Udfør i stedet en tilfældig offset i count() som i dine forespørgsler, men gør det hele på én gang.

with t as (
    select *
    from
        products p
        inner join
        images i using (productid)
    where
        prodtype = $sometype
)
select *
from t
offset floor(random() * (select count(*) from t))
limit 1

Denne version er muligvis hurtigere

with t as (
    select *, count(*) over() total
    from
        products p
        inner join
        images i using (productid)
    where
        prodtype = $sometype
)
select *
from t
offset floor(random() * (select total from t limit 1))
limit 1


  1. cakephp:hvordan får man NOW() til at fungere i søgetilstand?

  2. Sådan vælger du indtil en sum er nået

  3. En Marathon Training App Data Model

  4. Hvordan kan jeg redigere værdier af en INSERT i en trigger på SQL Server?