1

結合で構成され、約30,000以上のレコードを出力するクエリがあります。SQLコマンドORDERBYrand()を使用せずに、これらのレコードからランダムな10行を取得したいと思います。

レコードをループして配列に入れてシャッフル(シャッフル後に最初の10を取得)してみましたが、生成には約8〜12秒かかります。どうしてもこの処理時間を短縮したいです。

これをどのように達成しますか?

4

1 に答える 1

8

RAND()を使用したくない場合は、最初にid列だけを選択してから、必要な10行だけを選択してください。

  1. IDを$idarrayに選択します
    SELECT id FROM table
  2. $idarrayをシャッフルしてスライスします
    shuffle($idarray);
    $ids=array_slice($idarray,0,10);
  3. 完全な行を選択します
    $sql="SELECT ... WHERE id IN (".implode(', ', $idarray).")";

編集:これは確かにORDER BY RAND()を使用するよりもはるかに高速です!

于 2013-03-15T15:03:19.563 に答える