sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man returnerar exempelrad från databasen en efter en

En order by kommer alltid att vara dyrt, speciellt om uttrycket i ordningen efter inte är indexerat. Så beställ inte. Gör istället en slumpmässig offset i count() som i dina frågor, men gör allt på en gång.

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

Den här versionen kan vara snabbare

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. Hur man löser felet `prisma/klienten har inte initierats ännu` på Vercel

  2. Brott mot UNIQUE KEY-begränsning på INSERT WHERE COUNT(*) =0 på SQL Server 2005

  3. Hur får man data från 4 tabeller i 1 sql-fråga?

  4. Lägga in mySQL-databasinformation i en JavaScript-array