2013-01-07 81 views
0

我有下面的代碼..如果我在更新列上創建索引, 查詢是否會更快?更新列上的索引

CREATE NONCLUSTERED INDEX tmp ON #TestTable ( 
    jobid, 
    RecordGroup, 
    RecordSubGroup, 
    OpenDate 
) 

UPDATE #TestTable 
    SET OpenDate = OB.col1 
    , OpenWrap = OB.col2 
    , OpenBalance = OB.col3 
    FROM #TestTable ST 
    JOIN JobRecordOut OB ON OB.JobId = ST.JobId 
         AND OB.RecordGroup = ST.RecordGroup 
         AND OB.RecordSubGroup = ST.RecordSubGroup 
         AND OB.RecordType = 'OB' 

DROP INDEX tmp ON #TestTable 
+0

否。索引不會使更新/插入操作更快。你似乎不知道實際上是什麼索引,或者他們做了什麼,所以你應該在嘗試應用它們之前先讀一些關於它們的信息。在創建/刪除索引子句中包裝單個查詢將成爲一個特別糟糕的主意。創建索引不是免費的,它實際上可能非常昂貴,比更新本身更重要。 – meagar

+0

謝謝你的評論...是的,我是非常新的索引... – Thinna

回答

3

It depends™。

索引只能加速查找記錄,假設優化器確定索引將有所幫助。有一個索引不能確保它被使用。沒有數據庫,從不知情的版本,當它被寫爲能夠提供更具體的信息時被指定。

當索引與正在添加/更改的值相關時,索引會減慢插入/更新操作。這就是爲什麼索引需要維護的原因 - 它們可能會分散,因此如果不是整個重建,它們都需要「虛化」。有時候,完全重新創建索引會更具成本效益 - 它取決於數據和數據量。

當涉及到索引時,您必須嘗試&測試。他們沒有「銀彈」/神奇的答案。