【问题标题】:mysql use of index in WHERE and in GROUP BYmysql 在 WHERE 和 GROUP BY 中使用索引
【发布时间】:2013-02-20 18:58:47
【问题描述】:

这大约是一个多对多表,每个表都链接到大约 70000 条记录的表。多对多有大约 530 万条记录。

两个“side”表都有外键引用(一个是“tokens”,另一个是“paras”)。要找出包含给定标记的所有 paras,我需要按照以下行执行 SELECT 语句

SELECT para_id FROM many_to_many WHERE token_id = 3333 GROUP BY para_id;

尽管“token_id”列是复合主键的“最左边”列,并且在 para_id 上有一个索引(由 para_id 外键使用),但这似乎运行得很慢。

我尝试过使用 EXPLAIN,但这似乎从未提及使用 para_id 索引。我的问题是:是否可以让 MySQL 使用 para_id 索引?如果没有,如果我在查询中包含“JOIN paras ON paras.ID = many_to_many.para_id”,是否可以让它使用表“paras”的索引(在“ID”上)?这可能会导致性能提升吗?

【问题讨论】:

  • 请发布表的结构和EXPLAIN 输出。
  • 为什么在没有聚合函数的查询中使用GROUP BY?我敢打赌SELECT DISTINCT 在这种情况下会更好。
  • @Sammitch - 啊,有道理。非常感谢,我会探索这个。如果您关心积分等,也许您应该输入答案。

标签: mysql performance indexing


【解决方案1】:

您可能需要通过token_id 字段索引many_to_many。复合主键在这里没有帮助。

【讨论】:

  • 谢谢...我已经读过,实际上复合主函数的功能类似于普通的单字段索引,但仅适用于复合主索引中最左边的元素(在本例中为 token_id)。但是你的建议让我觉得我还是应该做一些实验......
猜你喜欢
  • 2019-03-24
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多