2013-04-29 2 views
12

ORDER BY rand()のパフォーマンスは他のソリューションに比べて非常に遅いのですか?はいの場合は、データベースからランダムな行を選択するより良い方法は何ですか?MySQLはランダムなrow-rand()のパフォーマンスを選択します

マイクエリ:

SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1; 
+3

便利なモミのかもしれません、とにかく、大きなテーブルと非常に遅いです。どのくらい大きなテーブルを話していますか? – bestprogrammerintheworld

+0

これはまた、正確には「ランダム」を意味するものによって異なります。すべてのレコードを等しい確率で選択する必要がありますか?あるいは、完全に一様な分布は不要ですか? – eggyal

+0

5-10.000行。同じ確率が望まれる。 –

答えて

13

はい、ORDER BY RAND()が大きく、結果セットでは非常に遅くなることがあります。

オプションは(配列に)この文で結果セットを取得することです。その後

SELECT sName FROM bpoint WHERE placeID=?; 

- $resultsetクエリからの無作為のアイテムを取得するためにarray_rand($resultset)を使用しています。

+2

それでは、PHP関数array_rand()は高速ですか? –

+0

@JamaicaBob - 結果セットの大きさによります。あなたのテーブルのbpointにはいくつの行がありますか? – bestprogrammerintheworld

+0

約10.000行 –

関連する問題