如果所有列都已编入索引,那么订单是否重要?

时间:2013-11-18 21:34:39

标签: sql database sqlite where

例如

  SELECT * FROM table WHERE column1 = x AND column2 = y

假设column1和column2都被编入索引,它们在WHERE子句中出现的顺序是否重要?

其中一列可以排除比另一列更多的记录。我应该先放一个,还是排除较少记录的专栏?

1 个答案:

答案 0 :(得分:1)

否 - AND的布尔表达式为commutative。无论您编写表达式的顺序如何,优化器都应该能够确定索引的每个组件使用哪个列。

你的例子非常简单,但是在很多其他情况下这都会改变:

  • 如果您使用OR而不是AND
  • 如果您使用>!=进行范围比较而非等同比较
  • 如果您索引column1,column2,column3但仅搜索column2和column3
  • 其他情况。

有关详细信息,请参阅我的演示文稿How to Design Indexes, Really