このクエリの目的は、検索のように動作することです。残念ながら、このクエリは現在1.5秒から2秒で実行されていますが、これは許容できません。クエリでEXPLAINを実行した後、「一時的な使用; filesortの使用」とインデックスが使用されています。しかし、私はあなたがこのクエリにインデックスを置くことができるかどうかは正確には分かりません。高速化MYSQL INNER JOIN 2つのテーブル間のクエリ
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