的顺序假设我有对富表两列索引的(X,Y)是否创建索引事
指数如果我搜索它作为select * from foo where x=1 and y=2
或select * from foo where y=2 and x=1
。在mysql上它真的很重要吗?
的顺序假设我有对富表两列索引的(X,Y)是否创建索引事
指数如果我搜索它作为select * from foo where x=1 and y=2
或select * from foo where y=2 and x=1
。在mysql上它真的很重要吗?
简答 - 不,没关系。 MySQL将尝试挑选最佳索引来使用,而不管该列是在您的WHERE
子句中首先出现还是第二次出现。
您可以通过在每一个上运行EXPLAIN
声明来证明这一点,以获得有关how MySQL will execute the query的更多信息 - 它应该显示在两种情况下都使用相同的索引。
如果你谈论的是列在索引中出现的顺序 - (x,y)
VS (y,x)
,它也不会在这种情况下,由于您使用的两列选择无所谓。如果您有时仅选择其中一列,那么该列应该首先出现在索引中,这样MySQL可以在只提供一个值时使用部分索引来帮助优化查询。
这对于查询优化到某些查询的Postgre非常有用,但MySQL只是忽略索引顺序(ASC,DESC)我不知道哪个版本会支持这个。
'我想' 这是一个工作台的bug,但wockbench队anwser我:
我们的手册,http://dev.mysql.com/doc/refman/5.5/en/create-index.html, 说:
“的index_col_name规约可以以ASC或DESC结束。这些 关键字可用于指定升序 或降序索引值存储的将来扩展。目前,它们被解析,但 被忽略;索引值始终以升序存储。
因此,可能这是您在Workbench中看到的原因:它允许添加该DESC选项,但服务器本身忽略它。
早些时候的评论可以在http://bugs.mysql.com/65893
通常被视为在SQL(任何版本),你告诉引擎*你想要什么*,**不** *如何做到这一点*。优化程序的工作是确定如何最好地执行这项工作。由于你的两个查询之间没有逻辑*差异,它们最终应该被优化。 –