2015-01-14 25 views
1

創建以下腳本來加載用戶帳戶。在管理工作室的初始測試中使用用戶名參數字符串。奇怪的是,我從參數字符串更改爲字符串文字後,查詢減慢了20秒。是不是通常用於參數嗅探的其他方式?我已經嘗試了DBCC FREEPROCCACHE並創建了一個存儲過程,並設置了一些本地變量,但是這並沒有加快查詢速度。有什麼建議麼?SQL where子句參數比字符串文字更快。我該如何解決?

DECLARE @accntRep VARCHAR(50) 
SET @accntRep = 'someUserName' 

SELECT accntRep,transBalance FROM companyView AS cv 
OUTER APPLY 
    (SELECT SUM(CASE WHEN pastdue > 0 THEN balance ELSE 0 END) AS pastDueBalance, 
     SUM(balance) AS transBalance FROM pastDueView WHERE compID = cv.compID 
    ) AS balance 
WHERE 
-- accntRep = @accntRep 
accntRep = 'someUserName' 
GROUP BY accntRep,transBalance 
+0

重建索引工作。我感覺有點傻。感謝您指出了這一點。 – user1777129

回答

2

字符串文字和局部變量之間的區別通常是使用局部變量使用平均分佈的統計問題。因此,如果平均值優於實際統計數據(假設[accntRep]字段中存在索引),則聽起來您的統計信息已過期。至少更新統計數據。或者,您可以對索引進行重新構建,只要索引未分區,將包含統計信息更新WITH FULLSCAN(在SQL Server 2012之前,分區索引也會收到完整的統計信息更新)。

+1

重建指數工作。應該先檢查一下。謝謝您的幫助。由於該指數是在星期天剛剛重建的,所以我沒有想到要這樣做。 – user1777129

+0

upvoted。希望我做對了。 – user1777129

相關問題