Как запросить случайную строку в SQL?

Решения, подобные Джереми:

SELECT * FROM table ORDER BY RAND() LIMIT 1

работают, но sql-syntax им требуется последовательное sql-syntax сканирование всей таблицы random-sample (поскольку необходимо вычислить sql-query случайное значение, связанное sql-syntax с каждой строкой, чтобы можно sql-statement было определить наименьшее), что random-number может быть довольно медленным random-sample даже для таблиц среднего random-sample размера. Я бы порекомендовал sql-query использовать какой-нибудь random-numbers индексированный числовой sql-select столбец (многие таблицы имеют random-sample их в качестве первичных ключей), а prng затем написать что-то вроде:

SELECT * FROM table WHERE num_value >= RAND() * 
    ( SELECT MAX (num_value ) FROM table ) 
ORDER BY num_value LIMIT 1

Это rand работает в логарифмическом random времени, независимо от размера random-sample таблицы, если num_value индексируется. Одно prng предостережение: здесь предполагается, что random-number-generator num_value равномерно распределено select-statement в диапазоне 0..MAX(num_value). Если ваш набор rand данных сильно отклоняется random-number-generator от этого предположения, вы sql получите искаженные результаты sql-select (некоторые строки будут появляться sql-statement чаще, чем другие).

sql

random

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