PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So geben Sie die Beispielzeile einzeln aus der Datenbank zurück

Eine order by wird immer teuer, besonders wenn der Ausdruck in order by nicht indiziert ist. Also nicht bestellen. Machen Sie stattdessen einen zufälligen Offset in count() wie in Ihren Abfragen, aber alles auf einmal.

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

Diese Version ist möglicherweise schneller

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