Я хотел бы оптимизировать свои запросы, поэтому я просматриваю mysql-slow.log
.
Большинство моих медленных запросов содержат ORDER BY RAND()
. Я не могу найти реальное решение для решения этой проблемы. Theres - возможное решение в MySQLPerformanceBlog, но я не думаю, что этого достаточно. На плохо оптимизированных (или часто обновляемых, управляемых пользователем) таблицах это не сработает, или мне нужно запустить два или более запросов, прежде чем я смогу выбрать свою PHP
-генерированную случайную строку.
Есть ли какое-либо решение для этой проблемы?
Пример фиктивного примера:
SELECT accomodation.ac_id,
accomodation.ac_status,
accomodation.ac_name,
accomodation.ac_status,
accomodation.ac_images
FROM accomodation, accomodation_category
WHERE accomodation.ac_status != 'draft'
AND accomodation.ac_category = accomodation_category.acat_id
AND accomodation_category.acat_slug != 'vendeglatohely'
AND ac_images != 'b:0;'
ORDER BY
RAND()
LIMIT 1