Sql-Server

如何設計索引以加快刪除速度

  • July 4, 2013

我想加快下面的程式碼

delete from ssn_sdo
where       
          (art_id=@art_id and skl_id=@skl_id and @level=0 )
       or (art_id=@art_id and skl_id=@skl_id and @level=1 and tip=@tip)
       or (art_id=@art_id and skl_id=@skl_id and doc_id = @doc_id)

我的伺服器是 MS SQL-Server 2005。

art_id, skl_idanddoc_id是整數,而 tip 是varchar(10)of 的類型。

我想在ssn_sdo表上創建一個索引,所以這個刪除會更快。

我正在考慮做的是製作三個索引,每個索引用於每種情況:

doc_id (ASC), art_id (ASC), skl_id (ASC)  
skl_id (ASC), art_id (ASC), tip (ASC)  
skl_id (ASC), art_id (ASC),  

或者有沒有更好的方法來製作一個包含所有三種情況的索引。

我對索引很小心,因為我不想減慢該表中的插入速度。

一個索引(art_id, skl_id, doc_id, tip)很可能就足夠了

所有條件都開始(art_id, skl_id)了,應該進行搜尋,然後對其中一個或將在之後進行剩餘查找doc_id``tip

索引也可以(skl_id, art_id, doc_id, tip)基於每列中唯一值的數量:最唯一性應該是第一個

多個索引意味著記憶體的查詢計劃對於不同的條件可能不是最優的

當然,如果art_id/skl_id中的一個或兩個已經是聚集索引,那麼您可能不需要索引,因為它會在聚集索引上搜尋然後執行殘差。如果doc_id是聚集索引,那麼你需要額外的索引

引用自:https://dba.stackexchange.com/questions/45712