2013-04-29 4 views
12

Правда ли, что производительность ORDER BY rand() очень медленная по сравнению с другими решениями? Если да, то каковы лучшие способы выбора случайных строк из базы данных?MySQL select random row - rand() performance

Мой запрос:

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=?; 

После этого - использовать array_rand($resultset) получить рандомизированное элемент из $resultset запроса.

+2

Итак, это функция php array_rand() быстрее? –

+0

@JamaicaBob - это действительно зависит от того, насколько большой результат. Сколько строк у вас в таблице bpoint? – bestprogrammerintheworld

+0

приблизительно 10.000 строк –