Вот игровой чейнджер, который может быть полезен для многих,
У меня есть таблица с 200k строк с последовательным идентификатором, мне нужно было выбрать N случайные строки, поэтому Я предпочитаю генерировать случайные значения, основанные на самом большом идентификаторе в таблице, я создал этот скрипт, чтобы узнать, какая из них самая быстрая:
logTime();
query("SELECT COUNT(id) FROM tbl");
logTime();
query("SELECT MAX(id) FROM tbl");
logTime();
query("SELECT id FROM tbl ORDER BY id DESC LIMIT 1");
logTime();
Результаты:
36.8418693542479
ms 0.241041183472
ms 0.216960906982
ms Основываясь на этих результатах, order desc - самая быстрая операция для получения максимального id. Вот мой ответ на вопрос:
SELECT GROUP_CONCAT(n SEPARATOR ',') g FROM (
SELECT FLOOR(RAND() * (
SELECT id FROM tbl ORDER BY id DESC LIMIT 1
)) n FROM tbl LIMIT 10) a
...
SELECT * FROM tbl WHERE id IN ($result);
FYI: Чтобы получить 10 случайных строк из таблицы 200k, мне потребовалось 1,78 мс (включая все операции на стороне php)