查询表时,它是指数的顺序,而不是表中实际列的顺序,对吧?
所以,如果你有一个4 col表...
col1 | col2 | col3 | col4
制作一个有序的索引......
col4, col2, col3
然后只要你的查询是在索引的顺序中,就会使用索引,对吧......?
WHERE col4 = "blah" AND col2 = "blah" and col3 = "blah"
干杯
答案 0 :(得分:2)
一般来说,重要的是索引中列的顺序,而不是表本身。但是,您在where
子句中编写条件的顺序也无关紧要。重要的是引擎是否可以使用一个或多个索引来获取与where
子句中的条件匹配的行。在您的示例中,可以使用索引,但如果仅从where
中删除了col4,则即使其他列位于where
和索引中,索引也无济于事。
答案 1 :(得分:1)
没有
WHERE
子句的顺序绝对没有区别,只要您没有任何AND
与OR
逻辑或括号或强制它的任何其他优先约束按特定顺序进行评估。
表中列的顺序也没有任何区别。
重要的是索引只能从左到右使用,直到遇到一个根本不在where子句中的列。发生这种情况时,该索引的该列和后续列不能用于搜索或排序。
在您的示例中,如果col2不在WHERE
子句中,则索引将被视为仅包含col4。索引中的col3值将与col2值一起被忽略。