【问题标题】:MySql: query optimization or table's structure optimizationMySql:查询优化或表结构优化
【发布时间】:2015-06-25 12:48:07
【问题描述】:

我需要一些关于 mysql 的帮助。

让我们告诉你。我有两张桌子:nodes(250 000 行):
id | name

还有表 groups(~400 000 行):
id | group_id | node_id - index(node_id) 可能还有 index(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 秒,这对我来说是个问题。

如何优化查询以计算行数然后进行选择? 我可以在哪里放置索引或新字段以获取利益?

【问题讨论】:

  • 连接列上是否有索引?
  • 使用说明找出您需要index的地方
  • Madhivanan,是的。索引(node_id)
  • 您可能需要一个索引为alter table groups add index gid_nid_idx(group_id,node_id),请确保在应用索引之前进行备份。
  • @AbhikChakraborty,谢谢,我会检查一下

标签: mysql sql query-optimization


【解决方案1】:
`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)

如果这不是您要查找的内容,请描述查询。

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多