Как оптимизировать sql запрос с ORDER BY RANDOM()?

Здравствуйте! Я не очень силен в sql, поэтому вся надежда на Вас, друзья)
Есть запрос:
SELECT `AdvertID`, `AdvertFolder`, `AdvertHeader`
FROM `Advert`
WHERE (CONVERT(`AdvertHeader` USING utf8) LIKE '%авто%' OR CONVERT(`AdvertComment` USING utf8) LIKE '%авто%') 
AND `AdvertApproved` = 1 
AND `AdvertActive` = 1
AND `AdvertPlaced` = 1
ORDER BY RAND()
LIMIT 5

Все бы ничего, но ORDER BY RAND() очень тормозит запрос, причем в таблице около 130 тыс. строк и запрос выполняется в пределах 3-4 секунд. Как можно оптимизировать этот запрос?
  • Вопрос задан
  • 774 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вопрос "почему медленно работает ORDER BY RAND()" просто канонический на собеседовании джуниора.
Вбейте в гугл, есть множество способов решения, у всех свои плюсы и минусы.
Ответ написан
Комментировать
@brud
специально для самых нежных и трепетных
Можно создать memory table из айдишников всех записей, удовлетворяющих условию, и проставить этому списку нумерацию (id(auto_increment), id_from_query) - в итоге берем max(id) из мемори тэйбла, и вызываем пять раз рандом от одного до макс айди. Дальше думаю понятно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы