Запрос с условием "ORDER BY RAND()" тормозит потому, что при каждом сравнении записей значение RAND() вычиляется заново.
Чтобы ускорить выполнение запроса, предварительно можно выполнить фильтрацию записей, тоже по случайному условию. Уменьшив количество исходных записей в 10 раз можно надеяться на уменьшение времени выполнения более, чем в 10 раз.
Пример для таблицы с 60 тысячами записей:
SELECT *
FROM table
ORDER BY RAND()
LIMIT 0, 30
Отображает строки 0 - 29 (57,850 всего, запрос занял 2.7433 сек.)
SELECT *
FROM table
WHERE RAND () < 0.1
ORDER BY RAND()
LIMIT 0 , 30
Отображает строки 0 - 29 (5,872 всего, запрос занял 0.0992 сек.) (Отредактировано автором: 13 Февраля, 2010 - 17:03:28)
|