最佳性能的Where子句中的ANDS顺序

时间:2010-09-27 16:36:13

标签: sql performance

我的想法是,如果我把我的ANDs过滤掉那些过滤掉少量行之前的行,那么我的查询应该运行得更快,因为And语句之间的选择集要小得多。

但是,SQL语句的WHERE子句中AND的顺序是否真的会影响SQL的性能,或者已经为此优化了引擎?

3 个答案:

答案 0 :(得分:18)

这实际上取决于优化者。

不应该重要,因为无论您如何描述,最佳运行查询都是优化者的工作。

在实践中,没有优化器是完美的,因此您可能会发现重新排序子句确实会对特定查询产生影响。唯一可以确定的方法是使用自己的架构,数据等自行测试。

答案 1 :(得分:6)

大多数SQL引擎都经过优化,可以为您完成这项工作。但是,我发现首先尝试刻掉最大的桌子可能会产生很大的不同 - 这并没有伤害!

答案 2 :(得分:1)

很大程度上取决于指数的设置方式。如果存在组合两个键的索引,则优化器应该能够使用单个索引搜索来回答查询。否则,如果两个密钥都存在独立索引,则优化器可以获得满足每个密钥的记录列表并合并列表。如果某个条件的索引存在而另一个条件不存在,则优化程序应首先使用索引列表进行筛选。在任何一种情况下,列出条件的顺序都无关紧要。

如果没有条件适用,指定条件的顺序可能会影响评估顺序,但由于数据库必须获取每条记录以满足查询,因此获取所花费的时间可能会使时间相形见绌花在评估条件上。