2011-01-27 77 views
0

我們有一個有趣的表查詢(SQL Server 2008),失敗時顯示不同的字段值。有沒有人見過這個?過濾器值導致查詢失敗

此運行良好(500毫秒)

SELECT ROW_NUMBER() OVER (ORDER BY StatisticNo asc) AS RowId, Statistics.* 
FROM Statistics 
WHERE myear = 2010 

這就完成了很長一段時間後(> 3分鐘)

SELECT ROW_NUMBER() OVER (ORDER BY StatisticNo asc) AS RowId, Statistics.* 
FROM Statistics 
WHERE myear = 2011 

該表包含數據兩者2010和2011年有趣的是它運行良好以及2012年作爲目前爲空集的過濾器選項。我們檢查了規範化的問題,沒有丟失或空數據。 myear字段是必需的數字。

有在表上沒有打開或活動的鎖。這是一個統計表,每天寫一次。

+0

運行`DBCC OPENTRAN dbname`來查看您是否有任何打開的事務。 – 2011-01-27 17:17:46

+0

你有沒有'myear = 2011'的記錄? – Lazarus 2011-01-27 17:18:40

+0

如果在每個查詢之前運行`DBCC FREEPROCCACHE`,會發生什麼?時間如何疊加? – 2011-01-27 17:35:27

回答

2

你可能有一個開放的交易鎖定2011一行。嘗試使用NOLOCK提示來確認。

如果返回的結果沒有被阻塞,那麼您可以通過再次運行而不是提示找到罪魁禍首,然後查看sys.dm_tran_locks,同時發生阻塞。

2

能否請您運行此查詢:

SELECT year, COUNT(*) 
FROM statistics 
GROUP BY 
     year 

如果您有20102012一些記錄,但是很多在2011記錄,那麼這將是完全正常的查詢運行的時間更長。