PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách trả lại hàng mẫu từ cơ sở dữ liệu từng cái một

Một order by sẽ luôn đắt tiền, đặc biệt nếu biểu thức theo thứ tự không được lập chỉ mục. Vì vậy, đừng đặt hàng. Thay vào đó, hãy thực hiện một sự bù trừ ngẫu nhiên trong count() như trong truy vấn của bạn, nhưng hãy thực hiện tất cả cùng một lúc.

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

Phiên bản này có thể nhanh hơn

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. Nhận xét ký tự / ký tự trong postgres / postgresql / psql?

  2. SQL Tìm tất cả con cháu trực tiếp trong một cây

  3. regexp_matches cách tốt hơn để loại bỏ việc trả về dấu ngoặc nhọn

  4. Bảng cắt ngắn Postgresql với ràng buộc khóa ngoại

  5. Chèn hàng loạt postgres trong đó dấu thời gian có ràng buộc null được thiết lập thông qua tuần tự hóa