Здравствуйте.
Встала задача - сделать случайную выборку 10 строк из таблицы. В таблице пока мало записей, но вскоре она разрастётся до десятков тысяч. Дело осложняется тем, что есть дополнительное условие выборки, а также в id могут встречаться дыры. По сути сам запрос прост:
SELECT id, title, desc FROM my_table WHERE group_id=25 ORDER BY RAND() LIMIT 10;
Но в таком виде он в будущем, наверно, станет сильно грузить сайт...
Вопрос: посоветуйте, как лучше оптимизировать всё это дело?
Можно как с помощью sql, так и на php.
Заранее дико благодарен за помощь.
Примерно вот так:
SELECT id, title, desc
FROM my_table AS r1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM my_table)) AS id)
AS r2
WHERE r1.id >= r2.id AND group_id=25
ORDER BY r1.id ASC
LIMIT 10
В моем случая в таблице с 8 миллионами записей отрабатывает за 202ms, когда с ORDER BY RAND() за 15s
Оригинальный ответ от @Riedsio
Продвижение своими сайтами как стратегия роста и независимости