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

cách chọn hàng ngẫu nhiên trong oracle nhanh hơn với bảng có hàng triệu hàng

Sử dụng các giá trị thích hợp của sample(x) là cách nhanh nhất bạn có thể. Đó là ngẫu nhiên theo khối và ngẫu nhiên theo hàng trong các khối, vì vậy nếu bạn chỉ muốn một hàng ngẫu nhiên:

select dbms_rowid.rowid_relative_fno(rowid) as fileno,
       dbms_rowid.rowid_block_number(rowid) as blockno,
       dbms_rowid.rowid_row_number(rowid) as offset
  from (select rowid from [my_big_table] sample (.01))
 where rownum = 1

Tôi đang sử dụng bảng được phân vùng con và tôi nhận được sự ngẫu nhiên khá tốt thậm chí lấy nhiều hàng:

select dbms_rowid.rowid_relative_fno(rowid) as fileno,
       dbms_rowid.rowid_block_number(rowid) as blockno,
       dbms_rowid.rowid_row_number(rowid) as offset
  from (select rowid from [my_big_table] sample (.01))
 where rownum <= 5

    FILENO    BLOCKNO     OFFSET
---------- ---------- ----------
       152    2454936         11
       152    2463140         32
       152    2335208          2
       152    2429207         23
       152    2746125         28

Tôi nghi ngờ rằng bạn có thể nên điều chỉnh SAMPLE của mình để sử dụng kích thước mẫu thích hợp cho những gì bạn đang tìm nạp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao Oracle bỏ qua chỉ mục với ORDER BY?

  2. Cách hiển thị ngày ở định dạng khác trong oracle

  3. SQLFiddle có bị hỏng không? Lỗi đối với Oracle, SQL Server, ...?

  4. Tạo trình kích hoạt trình tự Oracle

  5. Oracle:Chọn ngày giữa các phạm vi ngày bằng SQL