假設查詢正在過濾兩個字段並返回主鍵值。SQL:將主鍵添加到非唯一索引
SELECT RowIdentifier
FROM Table
WHERE QualifierA = 'exampleA' AND QualifierB = 'exampleB'
假設聚簇索引不是的PrimaryKey將包含QualifierA和QualiferB通過加入RowIdentifier(情況A &情形B)來提供最好的服務的非唯一索引。或者僅僅包括它會更恰當(情景C)?
場景A:非唯一,非聚集
CREATE NONCLUSTERED INDEX IX_Table_QualifierA
ON [dbo].[Table] ([QualifierA],[QualifierB],[RowIdentifier])
場景B:獨特的,非聚集
CREATE UNIQUE NONCLUSTERED INDEX IX_Table_QualifierA
ON [dbo].[Table] ([QualifierA],[QualifierB],[RowIdentifier])
方案C:
CREATE NONCLUSTERED INDEX IX_Table_QualifierA
ON [dbo].[Table] ([QualifierA],[QualifierB])
INCLUDE ([RowIdentifier])
最後我假設如果PrimaryKey是非必要的聚集索引,這是否準確?
爲了澄清,您是否在討論如何合併包含這三個字段的非聚類非唯一索引? – 2014-10-29 17:16:17
@ScottTeibert我想知道什麼更合適?包含所有三個字段的非聚集唯一索引,或僅包含兩個字段(QualifierA和QualifierB)但包含PrimaryKey的非聚集非唯一索引。 – 2014-10-29 17:31:20
@FrumRoll - 所有3個場景都覆蓋了索引,但是由於RowIdentifier只會包含在葉級別,所以場景C的索引會更小。你是正確的,如果主鍵被聚集,那麼QualifierA和QualifierB上的索引將被覆蓋。 – 2014-11-11 17:23:36