実は...私はテストを実行することになり、自分の質問に答えたかもしれません。他の人に役立つ場合に備えて、この情報をここに投稿すると思いました。 (ここで何か間違ったことをした場合は、お知らせください!)
これはちょっと驚くべきことです...
私が読んだすべてとは反対に、100万行のTestDataというテーブルを作成し、次のクエリを実行しました。
SELECT * FROM TestData WHERE number =41 ORDER BY RAND()LIMIT 8
...そして平均0.0070秒で行を返しました。 RAND()の評判が悪い理由はよくわかりません。少なくともこの特定の状況では、私にはかなり使いやすいようです。
テーブルに3つの列があります:
id [BIGINT(20)] | textfield [tinytext] |番号[BIGINT(20)]
IDの主キー、番号のインデックス。
MySQLは、「WHERE number =41」によって返される20行にのみRAND()を適用する必要があることを知っているほど賢いと思いますか? (具体的には、「number」の値が41の20行のみを追加しました。)
代替サブクエリメソッドは、平均時間が約.0080秒の結果を返します。これは、非サブクエリメソッドよりも低速です。
サブクエリメソッド:SELECT * FROM(SELECT * FROM TestData WHERE number =41)as t ORDER BY RAND()LIMIT 8