item_tag_map
2つの列がitem_id
ありtag_id
、両方にインデックスがあります。
データサンプルは次のとおりです。
item_id tag_id
1 1
1 3
4 7
1 5
3 1
3 8
6 8
10 4
次に、タグ1、2、3、5を持つアイテムIDを取得し、すべてのタグの総数で結果を並べ替えます。
結果のサンプルは次のとおりです。
item_id count(m.tag_id)
1 3
3 1
私が試したSQLは次のとおりです。
SELECT m.item_id,count(m.tag_id) from item_tag_map AS m
WHERE tag_id in(1,2,3,5)
GROUP BY m.item_id
ORDER BY count(m.tag_id)
LIMIT 10
このテーブルには約1万行あり、クエリは非常に低速でした。すべてのステートメントを削除しようとしましたcount
が、以前よりも非常に速くなりました。
なぜcount
このクエリの速度が低下するのでしょうか。このクエリを最適化して高速化するにはどうすればよいですか?