2011-01-13 61 views
-1

可能重复:
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; 

和实际执行的计划是表SCANE!并且返回的行的实际数量是 从表中的1600016行开始的672行。 (估计排是144000 r0ws)

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

+1

dup? http://stackoverflow.com/questions/4679563/how-that-happen-sp-sql-server/4679665#4679665 – 2011-01-13 11:56:07

+0

请不要双后 – gbn 2011-01-13 12:08:43

回答

0

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