2011-01-13 49 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),需要在每一行上進行評估。這是在嘗試編寫高性能查詢時要考慮的問題。