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.