2010-01-08 113 views
2

我在包含大約100,000條記錄的SQL 2000表上使用以下SQL。它非常緩慢。加速更新SQL查詢

如何加快速度?

UPDATE [MASTER] 
    SET [STATUS] = 1 
WHERE [CODE] IN (" + *customerCodes* + ")"; 

customerCodes從UI,其中用戶可以從網格檢查客戶通過。

回答

1

從改進此查詢開始,最明顯的地方就是查看您在[MASTER]表上的索引(順便提一下,我不建議將它重命名爲更少的名稱通用的,特別是因爲SQL Server系統數據庫被稱爲主數據庫)。

你想確保[CODE]有一個索引。

從那裏下一步是開始查看查詢執行計劃。

在SQL Server Management Studio(或SQL 2000上的查詢分析器)中,可以查看查詢執行計劃。我沒有查詢分析器的副本,所以我只能說在SSMS中通過選擇查詢 - >包括實際執行計劃來查看執行計劃。下一次運行查詢時,您將能夠看到查詢是如何執行的。您將希望確保您始終在查詢中創建索引,並且您不會執行像Table Scans這樣的低性能操作。

有一兩件事要了解與查詢執行計劃是,它會顯示在大集比小數據的不同的執行計劃,所以要調大查詢,你需要大量的測試數據集。

可能值得嘗試的最後一件事是將您的customerCodes變量(我猜測它是類似於'2,6,10,5'這是逗號分隔的id列表)轉換爲結果表值函數。我不確定這會給查詢優化器更多的工作,但它可能會。

+0

添加「AND [STATUS] <> 1」 WHERE子句將避免冗餘更新(除非你取決於它們的觸發)。 – 2010-01-08 07:03:09

0

那麼,最簡​​單的方法是確保'where'子句使用索引的字段。 (所以這意味着你改變你的界面,以便你可以得到索引字段(通常是一個ID),而不是你現在正在做的任何事情)。