我在表上有一个主键(比如ContactID). sql Server自动在此列上创建和维护聚簇INDEX.当我运行Tuning Advisor时(针对性能跟踪),它似乎建议在同一列上使用另一个INDEX – contactID列上的NON CLUSTERED索引.这将如何帮助 – 因为列上已经有聚簇索引?
解决方法
如果查询调优顾问在主键上建议使用非聚集索引,则它还会在另一列(或多列)上推荐聚簇索引.
主键是约束,而不是索引. MS sql Server的假设是主键也是从表中检索数据的主要方式(通过’where ContactID = 2’或ContactID上的表之间的连接).该假设意味着还会在构成主键的列上自动创建聚簇索引.这种行为还有其他原因,但现在让我们保持这个简单.
现在,如果针对该表的大多数查询都是在联系人名字(ContactFirstName字段)上,例如’Where ContactFirstName LIKE’Much%’,那么sql服务器将建议将聚簇索引从ContactID更改为ContactFirstName,因为表只能有1个聚簇索引.主键约束仍然存在(并防止欺骗行),但表中的数据将由ContactFirstName物理排序.
调优顾问消耗的工作量将决定调整顾问推荐的内容.调优顾问还将仅使用来自工作负载的最高资源查询的百分比而不是整个工作负载来进行确定.