簡體   English   中英

SQL Server:相同列性能的多個索引

[英]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

筆記:

  • WHERE子句順序無關緊要
  • SELECT *不好

另外,對外鍵列進行索引也是一個好主意,任何一種策略都可以工作

通常,我不會根據字段用法的變化創建3個索引,但這只是一條通用規則。

至於“我該如何做新手”答案,我將創建一個工作負載並使用調優顧問。 這不是最終的解決方案,隨着人們的了解,他們超越了向導,但這是一個很好的起點。 確保您有一個不錯的代表樣本,因為索引做得不正確會破壞其他查詢的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM