0

mysqlテーブルからランダムにレコードをフェッチしたい。rand()によるorderを使用してフェッチできることは知っていますが、大きなフィールドでは処理が遅いようです。randレコードをフェッチする他の方法はありますか?

4

4 に答える 4

2

主キーがある場合は、との間でId乱数を選択して、そのアイテムを取得できます。そのアイテムが存在しない場合は、もう一度やり直してください。MIN(Id)MAX(Id)Id

于 2012-08-09T06:50:05.027 に答える
2

最初にランドオフセットを取得できます

SELECT FLOOR(RAND() * COUNT(*)) AS rnd FROM your_table

次に、オフセットを使用してレコードを選択します。

于 2012-08-09T06:52:34.400 に答える
1
SELECT name
FROM random JOIN
     (SELECT CEIL(RAND() *
             (SELECT MAX(id)
              FROM random)) AS id
     ) AS r2
     USING (id);

あなたの質問はすでにここで回答されています:

MySQL の ORDER BY RAND() 関数を最適化するにはどうすればよいですか?

http://jan.kneschke.de/projects/mysql/order-by-rand/

于 2012-08-09T06:52:03.620 に答える
0

これを試すことができます:

SELECT * FROM  table 
join 
  (select round(rand()*(select max(id) from table)) as val from table) as rnd
on rnd.val=table.id;
于 2012-08-09T06:52:04.227 に答える