0

数値の主キーなしで 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 を使用する最善の方法ですか、それともより効率的なコードを使用することは可能ですか?

4

1 に答える 1

-1

最初の 1000 エントリを取得したいだけの場合 (ただし、オフセットを宣言することもできます)、MySql の Limit を確認する必要があります。

http://dev.mysql.com/doc/refman/5.0/en/select.html

于 2013-10-17T09:20:30.360 に答える