为什么查询优化器不优化此语句

时间:2017-11-10 19:35:32

标签: sql-server query-optimization

我正在测试一个问题并尝试理解为什么优化器不会优化总是评估为false的条件。这可能会有一个非常简单的答案,但是,它是星期五,我感觉很密集,所以这里:

采取以下三个陈述:

 DECLARE @Field1 = 22
 DECLARE @Test BIT = 0

   SELECT * FROM MyTable WHERE(MyField = @FieldID OR @Test=1)--1. SLOW
   SELECT * FROM MyTable WHERE(MyField = @FieldID OR @Test=0)--2. FAST
   SELECT * FROM MyTable WHERE(MyField = @FieldID OR 1=0)    --3. FAST
   SELECT * FROM MyTable WHERE(MyField = @FieldID OR 0=0)    --4. FAST

查询1在执行时间中滞后其他查询大约30秒。 无论表中是否存在@FieldID,查询2,3,4都会在1秒内返回数据。

为什么查询1的执行时间比查询3长30? @Test值无法在WHERE语句中更改,因此应该将其视为查询3中的常量值,我认为。

0 个答案:

没有答案