不同的查询计划到同一个查询!

时间:2011-01-13 11:53:21

标签: sql-server database tsql sql-execution-plan

  

可能重复:
  how that happen SP sql server

你好,我得到一些奇怪的东西。我跑了这个sql:

SELECT   Id , GameTypeId , PlayerId , BetAmount , Profit ,          
         DateAndTime 
FROM     Results 
WHERE    DateAndTime >= DATEADD (DAY , -1 , SYSDATETIME ())        
         AND          
         DateAndTime < SYSDATETIME () 
ORDER BY DateAndTime ASC;

我在日期列上有非群集索引 以及返回的实际行数 表中的1600016行中有672行。 (估计的行是1)

之后我运行了这个sql:

declare @d DATETIME2(7)  
set @d = DATEADD (DAY , -1 , SYSDATETIME ()) 
declare  @d2 DATETIME2(7) 
set @d2  = SYSDATETIME ()  

SELECT   Id , GameTypeId , PlayerId , BetAmount , Profit ,         
         DateAndTime FROM     Results 
WHERE    DateAndTime >= @d          
         AND          
         DateAndTime < @d2 
ORDER BY DateAndTime ASC; 

并且实际执行计划是TABLE SCANE !!!以及返回的实际行数 表中的1600016行中有672行。 (估计行数为144000 r0ws)

有些人知道这里发生了什么事吗?!?!?

1 个答案:

答案 0 :(得分:0)

您确定没有混淆执行计划吗?我会从快速浏览一下第一个查询需要进行表扫描的sql。我认为这是因为你在where子句中有一个计算(DATEADD),需要在每一行上进行计算。这是在尝试编写高性能查询时要做的事情。