选择"where子句"评估顺序

t3m*_*jin 26 sql sql-server performance select sql-server-2005

在Sql Server 2005中,当我有多个参数时,我是否保证评估顺序始终是从左到右?

举个例子:

select a from table where c=1 and d=2

在此查询中,如果"c = 1"条件失败,则永远不会评估"d = 2"条件?

PS-"c"是整数索引列,d是需要全表扫描的大型varchar和非索引列

更新我试图避免执行两个查询或条件语句,我只需要类似:如果"c condition"失败,有一种方法可以避免执行繁重的"d条件",因为在我的情况下不需要它.

kdg*_*ory 29

评估订单无法保证.优化器将尝试使用可用信息找到执行查询的最有效方法.

在您的情况下,由于c是索引而d不是,因此优化器应查看索引以查找与c上的谓词匹配的所有行,然后从表数据中检索这些行以评估d上的谓词.

但是,如果它确定c上的索引不是非常有选择性(虽然不是在您的示例中,性别列很少被有效索引),它仍可能决定进行表扫描.

要确定执行顺序,您应该获得查询的解释计划.但是,要意识到该计划可能会根据优化程序认为现在最好的查询而改变.