2010-08-24 128 views
1

Windows Server 2008 R2上的SQL Server 2005 SP3。SQL Server索引

我运行了一个服务器端跟踪,并使用DTA(数据库引擎优化顾问) 在一张桌子上,DTA建议我使用集群密钥创建一个非聚簇索引。我的意思是每个DTA我需要创建一个复合非clustred索引与显式clustred索引键作为非聚集索引的一部分。

我认为在叶级别的非credred索引已经包括聚类密钥。

MeasurementDataID是primay关键,并聚集在它的索引...

CREAT INDEX IX_NAME(
[MeasurementID] ASC, 
[SampleName] ASC, 
[MeasurementDataID] ASC) 

回答

0

在叶级它包括聚集键让你有将覆盖查询索引。

但是,如果您的查询

WHERE MeasurementID = 1 AND SampleName = 'foo' AND MeasurementDataID=10

没有列入MeasurementDataID它仍然需要扫描所有记录匹配WHERE MeasurementID = 1 AND SampleName = 'foo'部分指标,而不是满足了整个事情寻求如此依赖前两者的选择性可能仍然有用。

当考虑将索引作为包含列添加到索引或将其添加到关键字时,您需要做出基本相同的决定。

+0

我仍然不清楚.. 是否可以明确创建非clustred索引与clustring密钥?我认为SQL服务器会将它添加到现场.. 如果索引体系结构是关键值对,那么是否将聚类键添加为键值(在叶级别上的非可变索引)或作为值的一部分。 – cshah 2010-08-24 14:49:01

+0

它不会添加两次。如果它在密钥中,它会识别并不会再次添加它,因此可以将其明确添加到密钥中,或者将其隐式添加到密钥中。无论什么对你的查询最有意义。 – 2010-08-24 14:50:24