item_tag_map
有两列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
该表中有大约 10k 行,查询非常慢。我试图删除所有count
语句,然后它变得比以前非常快。
为什么会count
减慢这个查询?如何优化此查询以使其快速?