sample(x)
の適切な値を使用する あなたができる最速の方法です。ブロック内ではブロックランダムと行ランダムなので、ランダムな行が1つだけ必要な場合:
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
サブパーティションテーブルを使用していますが、複数の行を取得してもかなりランダムになります:
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
おそらくSAMPLE
を調整する必要があると思います フェッチするものに適切なサンプルサイズを使用する句。