簡體   English   中英

當日期范圍較小時,SQL查詢需要更長的時間?

[英]SQL query takes longer time when date range is smaller?

我有一個簡單的select語句,它從SQL Server 2000(舊的)表中選擇數據,大約有1000萬到2000萬行,如下所示 -

@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) 

這在大約10秒內給了我大約40 K行。 但是,如果我設置@startDate ='2014-01-30',保持@endDate相同,則查詢大約需要2分30秒

為了產生相同數量的行,我再次嘗試01-30,花了2分48秒。

看到差異,我感到很驚訝。 我沒想到差別如此之大。 相反,我期望它在較小的日期范圍內花費相同或更少的時間。

可能是什么原因以及如何解決?

您最近是否插入和/或刪除了大量行? 可能是表的索引上的統計信息已經過時,因此查詢優化器將在較小的日期范圍內進行“索引查找+鍵查找”方案 - 但結果卻比僅僅執行表更慢/聚集索引掃描。

我建議更新統計信息(請參閱此TechNEt文章,了解如何更新統計信息並重試 - 任何改進?

查詢優化器使用統計信息來確定是否更快地執行表掃描(只讀取所有表的數據頁並選擇匹配的行),或者在索引中搜索搜索值是否更快; 該索引通常不包含所有數據 - 因此一旦找到匹配項,就需要在表上執行密鑰查找以獲取數據 - 這是一項昂貴的操作,因此它僅適用於小型數據集。 如果過時的統計信息“誤導”了查詢優化器,則可能會選擇次優的執行計划

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM