假设我在(x,y)
索引的foo表上的两列上有索引如果我将其搜索为select * from foo where x=1 and y=2
或select * from foo where y=2 and x=1
。在mysql上真的很重要。
答案 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选项,但服务器本身会忽略它。