結合で構成され、約30,000以上のレコードを出力するクエリがあります。SQLコマンドORDERBYrand()を使用せずに、これらのレコードからランダムな10行を取得したいと思います。
レコードをループして配列に入れてシャッフル(シャッフル後に最初の10を取得)してみましたが、生成には約8〜12秒かかります。どうしてもこの処理時間を短縮したいです。
これをどのように達成しますか?
RAND()を使用したくない場合は、最初にid列だけを選択してから、必要な10行だけを選択してください。
SELECT id FROM table
shuffle($idarray);
$ids=array_slice($idarray,0,10);
$sql="SELECT ... WHERE id IN (".implode(', ', $idarray).")";
編集:これは確かにORDER BY RAND()を使用するよりもはるかに高速です!