我有从SQL Server 2000(太旧)表像这样大约10-20万行数据选择一个简单的SELECT语句 -当日期范围较小时,SQL查询需要较长时间?
@startDate = '2014-01-25' -- yyyy-mm-dd
@endDate = '2014-02-20'
SELECT
Id, 6-7 other columns
FROM
Table1 as t1
LEFT OUTER JOIN
Table2 as t2 ON t1.Code = t2.Code
WHERE
t1.Id = 'G59' -- yes, its a varchar
AND (t1.Entry_Date >= @startDate AND t1.Entry_Date < @endDate)
这给了我大约40 K行约10秒。但是,如果我设置@startDate ='2014-01-30',保持@endDate始终相同,那么查询大约需要2分30秒
要产生相同数量的行,我试着用01-30又花了2分48秒。
我很惊讶地发现差异。我并不期待差异如此之大。相反,我期待它在较短的日期范围内采取相同或更少的时间。
这可能是什么原因以及如何解决?
您最近插入和/或删除了大量行吗?这可能是因为表索引上的统计信息已过时,因此查询优化器将在较短的日期范围内进行“索引查找+密钥查找”场景 - 但结果会比仅执行表更慢/聚集索引扫描。我会更新统计数据并再次尝试 - 有什么改进? –
@marc_s - 我不知道是否有任何行已被插入。这很可能。我不插入任何。我只做提取(ETL)。我仍然在学习,所以我不明白你的意见。我如何更新统计信息?我不是DBA btw。谢谢。 – Steam
[TechNet文章如何更新SQL Server 2000中的统计信息](http://technet.microsoft.com/en-us/library/aa260645%28v=sql.80%29.aspx) –