Я использую запрос, который обычно выполняется в течение секунды, но иногда занимает от 10 до 40 секунд для завершения. На самом деле я не совсем понимаю, как работает подзапрос, я просто знаю, что он работает, потому что он дает мне 15 строк для каждого файла faverprofileid.Советы по улучшению этого медленного запроса mysql?
Я регистрирую медленные запросы, и это говорит мне, что были проанализированы строки из 5823244, что нечетно, потому что в любой из таблиц нет нигде рядом с множеством строк (таблица фаворитов имеет наибольшее количество в 50 000 строк) ,
Может ли кто-нибудь предложить мне несколько указателей? Это проблема с подзапросом и необходимость использования filesort?
EDIT: Running explain показывает, что таблица пользователей не использует индекс (хотя идентификатор является первичным ключом). В разделе «Дополнительно» сказано: использование временных; Использование filesort.
SELECT F.id,F.created,U.username,U.fullname,U.id,I.*
FROM favorites AS F
INNER JOIN users AS U ON F.faver_profile_id = U.id
INNER JOIN items AS I ON F.notice_id = I.id
WHERE faver_profile_id IN (360,379,95,315,278,1)
AND F.removed = 0
AND I.removed = 0
AND F.collection_id is null
AND I.nudity = 0
AND (SELECT COUNT(*) FROM favorites WHERE faver_profile_id = F.faver_profile_id
AND created > F.created AND removed = 0 AND collection_id is null) < 15
ORDER BY F.faver_profile_id, F.created DESC;
Вы можете получить лучшую синтаксическую раскраску, если вы написали слова «выбрать», «от», «где», «и», «в» и «упорядочить по» маленькими буквами, а также «внутренние», , "on" и "desc" только с первой заглавной буквой. –
Вы пытаетесь выбрать первые 15 элементов для каждого файла faver_profile_id, заказанного созданным? – Quassnoi
Вы запустили ANALYZE на столах? – vladr