Как запросить случайную строку в SQL?
Решения, подобные Джереми:
SELECT * FROM table ORDER BY RAND() LIMIT 1
работают, но sqlselect им требуется последовательное rand сканирование всей таблицы random (поскольку необходимо вычислить sql-query случайное значение, связанное sql-syntax с каждой строкой, чтобы можно rand было определить наименьшее), что rand может быть довольно медленным random-sample даже для таблиц среднего sql-statement размера. Я бы порекомендовал sql-syntax использовать какой-нибудь random-number индексированный числовой random-number столбец (многие таблицы имеют sql-statement их в качестве первичных ключей), а prng затем написать что-то вроде:
SELECT * FROM table WHERE num_value >= RAND() *
( SELECT MAX (num_value ) FROM table )
ORDER BY num_value LIMIT 1
Это sql работает в логарифмическом sqlselect времени, независимо от размера rand таблицы, если num_value
индексируется. Одно sqlselect предостережение: здесь предполагается, что select-statement num_value
равномерно распределено sql в диапазоне 0..MAX(num_value)
. Если ваш набор sql-select данных сильно отклоняется random от этого предположения, вы sql-syntax получите искаженные результаты prng (некоторые строки будут появляться select-statement чаще, чем другие).
sql
random
Как запросить случайную строку в SQL?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.