Sql-Server
如何設計索引以加快刪除速度
我想加快下面的程式碼
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_id
anddoc_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
是聚集索引,那麼你需要額外的索引