2012-07-18 44 views
1

此查詢的工作:的WHERE子句涉及外鍵的某些值是緩慢

SELECT [ID] 
    ,[PROJECT_ID] 
    ,[NAME] 
    ,[LOCATION] 
    ,[COMMENT] 
FROM table1 
WHERE PROJECT_ID = 4479 

但是這一次沒有:

SELECT [ID] 
    ,[PROJECT_ID] 
    ,[NAME] 
    ,[LOCATION] 
    ,[COMMENT] 
FROM table1 
WHERE PROJECT_ID = 3560 

它旋轉和旋轉下去。唯一的區別是使用的值。

「PROJECT_ID」是一個外鍵,並且有一個索引被定義爲唯一列(通常與FKs一起)。

並行:此表上的FK索引存在高碎片。

這些可能是相關的,即如果我重建索引,我應該期望問題會得到解決嗎?

我現在不能重建它們,因爲它是一個生產系統,我的理解是我只能在獲得鎖的時候重建索引......比如今晚晚些時候。

有關如何「強制重建數據庫中所有表中的所有索引(即使斷開用戶連接)」的任何指導,同樣值得讚賞。

感謝, - 傑西

+0

我已經確認重建索引確實解決了我的問題,一旦我想出如何刪除阻塞連接/會話以便通過右鍵單擊SSMS中的「索引」來重建。謝謝。 – 2012-07-18 20:19:35

+0

您至少可以在白天進行在線索引重組,以便在重建期間在晚上做更少的工作。 – ErikE 2012-07-18 20:41:11

回答

2

那些是封裝在一個存儲過程的查詢?如果是這樣,你可能會受到參數嗅探的影響。

您可能還會檢查您的統計信息;如果他們已經過時了,你可能會得到一個很差的執行計劃,而不是與其他參數相關。

+0

如果選擇性非常不穩定(或者表格太大以至於手動保持統計數據爲最新狀態就像是用杯子排出海洋),那麼您可能需要在查詢中添加「OPTION(RECOMPILE)」,以阻止參數嗅探。 – 2012-07-18 19:55:31

+0

謝謝。這不是SP相關的,但至少與Stats相關,如果不是Index(不確定,因爲兩者都是在重建上完成的,這是我的理解。) – 2012-07-18 20:22:03