[英]SQL Server: multiple index for the same columns performance
我有一個表Person
,其中包括personId, teamId, departmentId
列。 大多數查詢在where上使用這些列的組合。
例
Select * from .. where personId = 2 and departementId = 1
Select * from .. where personId = 2 and teamId = 1
Select * from .. where departmentId = 2 and teamId = 1
我的問題是,是否應該分別為每個列創建索引?
快速答案是肯定的-只需為每列添加一個索引。 它可能不是最佳解決方案,但在大多數情況下,相距不遠,除非在該表上已有許多索引,否則它不會造成任何危害。
唯一稍長一點的答案是,您應該針對代表性數據 測試查詢-SQL Server數據庫引擎優化顧問可以為您建議索引,但只有您可以檢查以確保這些索引適合其他所有查詢(包括插入/更新)-您需要在讀取性能與寫入數據庫時維護這些索引的成本(以及任何存儲/空間限制)之間取得平衡。
每列任一:SQL Server將使用索引交集
或者,嘗試如下操作:三個復合索引。 每個字段的第一列也可用作“單列索引”。
departmentId, teamId, personId
personId, departmentId, teamId
teamId, personId, departmentId
筆記:
SELECT *
不好 另外,對外鍵列進行索引也是一個好主意,任何一種策略都可以工作
通常,我不會根據字段用法的變化創建3個索引,但這只是一條通用規則。
至於“我該如何做新手”答案,我將創建一個工作負載並使用調優顧問。 這不是最終的解決方案,隨着人們的了解,他們超越了向導,但這是一個很好的起點。 確保您有一個不錯的代表樣本,因為索引做得不正確會破壞其他查詢的性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.