RAND()
で注文する理由 遅くなる可能性があるのは、何かを返す前にデータベースにテーブル全体を実際にソートするように強制していることです。負荷を単一のテーブルスキャンに減らすだけで、はるかに高速になります(それでも多少遅いですが)。
これは、注文を回避するだけで途中で取得できることを意味します:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
これにより、テーブル内のすべての行の約1%が選択され、並べ替えられて上位100が返されます。ここでの主な問題(および@cmdの回答)は、クエリが返されることを確認できないことです。何でも。
上記のアプローチでは、テーブル全体のスキャン(使用する行を決定するため)に続いて、行の約1%をスキャンする必要があります。行が多い場合は、それに応じてパーセンテージを減らすことができます。