PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zwrócić przykładowy wiersz z bazy danych jeden po drugim?

order by będzie zawsze kosztowny, zwłaszcza jeśli wyrażenie w kolejności według nie jest indeksowane. Więc nie zamawiaj. Zamiast tego wykonaj losowe przesunięcie w count() tak jak w zapytaniach, ale zrób to wszystko na raz.

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

Ta wersja może być szybsza

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wartość typu enum w postgresie?

  2. Znajdź wszystkie wiersze używając jakiegoś zakresu Unicode (takiego jak znaki cyrylicy) za pomocą PostgreSQL?

  3. Przyspieszyć plpgsql, który zlicza typy dokumentów w pętli?

  4. Django OperationalError:nie można forkować nowego procesu dla połączenia

  5. Synchronizacja bazy danych 2 nie powiodła się