索引创建的顺序是否重要

时间:2013-07-19 06:46:32

标签: mysql optimization indexing

假设我在(x,y)

索引的foo表上的两列上有索引

如果我将其搜索为select * from foo where x=1 and y=2select * from foo where y=2 and x=1。在mysql上真的很重要。

2 个答案:

答案 0 :(得分:1)

简短回答 - 不,没关系。无论该列在WHERE子句中是第一位还是第二位,MySQL都会尝试选择最佳索引。

您可以通过对每个语句运行EXPLAIN语句来获得有关how MySQL will execute the query的更多信息来证明这一点 - 它应该表明在两种情况下都使用了相同的索引。


如果您正在讨论列在索引中显示的顺序 - (x,y) vs (y,x),则在这种情况下也无关紧要,因为您选择使用这两列。如果你有时只选择其中一列,那么该列应首先出现在索引中,这样当只提供一个值时,MySQL可以使用部分索引来帮助优化查询。

答案 1 :(得分:0)

这在Postgre上对查询优化某些查询非常有用,但MySQL只是忽略索引顺序(ASC,DESC)我不知道哪个版本会支持这个。

'我认为'这是一个工作台错误,但是wockbench团队对我说:

  

我们的手册http://dev.mysql.com/doc/refman/5.5/en/create-index.html,    表示:

     

“index_col_name规范可以以ASC或DESC结尾。这些   允许使用关键字以用于指定升序的未来扩展   或降序索引值存储。目前,他们被解析但是   忽略;索引值始终按升序存储。“

     

所以,这可能是你在Workbench中看到的原因:它   允许添加该DESC选项,但服务器本身会忽略它。

可以在http://bugs.mysql.com/65893

查看早期评论