你好,我得到一些奇怪的东西。我跑了这个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)
有些人知道这里发生了什么事吗?!?!?
答案 0 :(得分:0)
您确定没有混淆执行计划吗?我会从快速浏览一下第一个查询需要进行表扫描的sql。我认为这是因为你在where子句中有一个计算(DATEADD),需要在每一行上进行计算。这是在尝试编写高性能查询时要做的事情。