@timkin1

Как оптимизировать ORDER BY RAND()?

Добрый день!

Имеется база данных data_names, состоящая из имен людей name и языка lang_iso. Необходимо достать случайное имя человека на определённом языке. Сейчас это делается с помощью ORDER BY RAND(), как известно, это очень медленный способ. Нашел такую оптимизацию, она работает действительно быстро, но у меня появилась следующая мысль: когда я делаю выборку имен на определенном языке, и потом вместо ORDER BY RAND() использую оптимизацию, приведенную выше, то возможно, что в получившейся выборке имена расположены не по порядку, и их индексы, например, могут быть такими: 1,2,100. Тогда вероятность выбора 3 имени в разы больше, т.к. вероятность выбора числа из интервала 3 - 100 в разы больше, чем из 1-2. Верно ли я понял приведенный алгоритм? Возможно ли как-то решить этот вопрос без перестроения БД?

Заранее спасибо!
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
да, поняли вы верно. алгоритм будет сбоить, тем больше, чем больше и чаще пропуски в идентификаторах. но чтобы такое произошло на больших объемах придется потрудиться. для успокоения совести проведите скриптом сотню-две тысяч тестов и удостовертесь, что распределение результатов вас устраивает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы