数値の主キーなしで 100.000.000 のレコードを持つテーブルから1000 のランダムな行を抽出する最も効率的な方法は何ですか?
非常に効率が悪いため、 ORDER BY RAND()の使用は除外されます。
私が見つけた最良の方法を見て回るのは次のとおりです。
SELECT key FROM (
SELECT @cnt := COUNT( * ) +1, @lim := 1000 FROM table
)vars STRAIGHT_JOIN (
SELECT r . * , @lim := @lim -1
FROM table r
WHERE (
@cnt := @cnt -1
)
AND RAND( ) < @lim / @cnt
)i
これは MySQL 5 を使用する最善の方法ですか、それともより効率的なコードを使用することは可能ですか?