我需要一些关于mysql的帮助。
让我们告诉你。我有两张桌子:nodes
(250 000行):
id | name
表groups
(约400 000行):
id | group_id | node_id
- 索引(node_id)和索引(group_id)
问题查询:
select count(*) from nodes n inner join groups g on g.node_id = n.id \
where g.group_id in (1,20, 30...);
执行时间: 0.50秒,这对我来说是个问题。
如何优化查询以计算行然后进行选择? 我可以将索引或新字段用于获益?
答案 0 :(得分:0)
`SHOW CREATE TABLE` for each table
不要为id
打扰多对多表格。确保索引在这样的表格中双向进行。
为什么您的问题查询需要触及nodes
?这将计算每组中的节点数量,不是吗?
SELECT group_id,
COUNT(*)
FROM groups
WHERE group_id IN (...)
GROUP BY group_id;
groups
:PRIMARY KEY(group_id, node_id)
,INDEX(node_id, group_id)
如果这不是您要找的,请描述查询。