Цель этого запроса - действовать как поиск. К сожалению, запрос в настоящее время работает от 1,5 до 2 секунд, что неприемлемо. После запуска EXPLAIN в запросе я вижу, что он использует «Использование временного, с использованием filesort» и никаких индексов. Тем не менее, я не совсем уверен, где вы можете поместить индекс в этот запрос.Ускорение MYSQL INNER JOIN Запрос через две таблицы
ORDER BY также замедляет запрос по всей стране, но это необходимо. Любые предложения по улучшению этого запроса?
SELECT DISTINCT p.id, p.date,
(
SELECT COUNT(post_id) FROM post_tags WHERE post_id = pt.post_id
) as t_count
FROM post_tags pt
INNER JOIN posts p
ON (pt.post_id = p.id)
WHERE pt.t_id IN (7,456)
ORDER BY t_count, p.s_count DESC, p.id DESC
LIMIT 0, 50;
Вот EXPAIN заявление: https://gist.github.com/e742982e435cf082c033
Можете ли вы опубликовать полный выход объяснить, как хорошо. –
Не эффективнее ли использовать count (pt.post_id) и GROUP BY p.id и p.date? Вы можете избавиться от подзапроса, а затем для стартеров. – dash
@AdrianCornish Я добавил оператор EXPLAIN к сообщению и здесь: https://gist.github.com/e742982e435cf082c033. – stwhite