Как запросить случайную строку в 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

2022-11-18T20:14:19+00:00