2011-05-24 42 views
4

我有一個MSSQL2005數據庫,其記錄可以追溯到2004年,當前在一個特定表中只有不到1,000,000條記錄。如果我運行的報告比較2009年的數據與2010年的數據,2008年比2009年,2009年比2009年或今年之前的任何年份的組合,然後結果在1-5秒內返回。當訪問最近的記錄時,SQL性能變慢

但是如果我運行包含2011年數據的報告,那麼報告需要大約6分鐘。

我檢查了數據,它看起來與前幾年相似,並與所有報告中使用的相同數據進行了交叉引用。

就好像數據庫已經超出了一些限制;今年的數據已經變得分散,因此難以獲取。我不是說這是事實,但可能是我所知道的。

任何人有任何建議嗎?

Shaun。

更新:
由於張貼的問題,我發現DBCC DBREINDEX table_name的這似乎已經完成了帽子戲法。

+3

您還需要提供** WAY **關於此的更多信息。什麼是表結構?你正在運行什麼查詢?任何分區?正如馬丁所說,你還需要檢查執行計劃。 – JNK 2011-05-24 10:53:33

+0

也是相關表格上的兩個執行計劃和索引。 – EBarr 2011-05-24 10:56:25

+0

如果沒有表模式,存儲過程,執行計劃和其他相關信息,將無法幫助您。 – 2011-05-24 10:56:43

回答

5

執行計劃是什麼樣的?如果不同,則可能需要手動更新表上的統計信息,因爲新插入的行在統計信息中可能不成比例地表示,因此可能會選擇次優方案。

看到這個博客帖子這個問題Statistics, row estimations and the ascending date column

的說明,此外檢查您的2011查詢不遇到阻擋因併發插入或更新不影響對歷史數據的查詢。

+0

+1 - 我在想自己的併發性。我還懷疑它可能在日期分區,舊分區不活動或者索引不一致。 – JNK 2011-05-24 10:59:56

+1

幾個月前我在工作中遇到了同樣的問題,我們注意到爲較新的行創建一個過濾的統計信息,優化程序更好地處理這些行。最初它是這樣想的,因爲直方圖中沒有數據只有一行會被返回,因此它沒有執行預讀和循環嵌套連接。 – JStead 2011-05-24 12:17:00