优化(索引)具有GROUP BY语法的查询

时间:2012-10-11 20:44:55

标签: mysql

SELECT MIN(id) 
FROM mytable 
WHERE lastname IN('Smit','Lee') 
GROUP BY name

在这里,为了优化这个查询,索引需要(将是有用的)列 lastname 对吗? 列名称还需要索引吗?或者只有索引的姓氏就足够了?

3 个答案:

答案 0 :(得分:2)

lastname上的索引通常对该查询很有用。索引名称不应该有效。

您可以(并且应该)使用EXPLAIN来查看MySQL将如何执行您的查询。

答案 1 :(得分:2)

在编程中生活的一个好规则是永远不要假设你知道什么是慢速或快速。总是测试它。

结帐此链接MySQL profiling。添加您认为可行的索引,然后运行一些测试。

答案 2 :(得分:1)

这两个建议的索引都应该对你的情况有所帮助,但是这很大程度上取决于你拥有的数据以及数据库引擎考虑某些操作的代价,具体取决于你是否有重复的id,我怀疑你不是这就是为什么它被称为id,但如果你在lastname, idname, id上做一个2列索引也会有所帮助。最终,查询优化器将决定用于获取数据的策略,这肯定会影响很多事情...... 我建议你尝试以下内容,看看哪个更快

  • lastname上的索引 - 很可能
  • name上的索引 - 不太可能
  • lastname, name上的索引 - 很可能是
  • name, lastname上的索引 - 最不可能

同样它真的取决于数据,但我按照我认为他们应该帮助大多数具有唯一ID的数据的顺序标记每一个,如果你的id不是唯一的尝试与id上的索引的组合