假设查询正在过滤两个字段并返回主键值。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