正在扫描 SQL2005 数据库并看到以下两个表的索引:
**PK_CLUSTERED_INDEX**
USER_ID
COMPANY_ID
DEPARTMENT_ID
**NON-unique_NON-clustered_INDEX**
USER_ID
COMPANY_ID
我最初的想法是,删除最后一个索引,因为 PK_CLUSTERED_INDEX 已经包含这些列,正确的顺序和排序。最后一个指数是否提供任何收益?
正在扫描 SQL2005 数据库并看到以下两个表的索引:
**PK_CLUSTERED_INDEX**
USER_ID
COMPANY_ID
DEPARTMENT_ID
**NON-unique_NON-clustered_INDEX**
USER_ID
COMPANY_ID
我最初的想法是,删除最后一个索引,因为 PK_CLUSTERED_INDEX 已经包含这些列,正确的顺序和排序。最后一个指数是否提供任何收益?
在这种情况下,删除索引,因为它不是唯一的,我敢打赌优化器永远不会命中它,第一个索引更唯一,并且在找到匹配项后不涉及行查找。
第一个更好,你不会因为放弃第二个而失去任何东西。
我会删除 NON-unique_NON-clustered_INDEX 索引,它是多余的,不需要。
如果按 User_ID 或 User_ID 和 Company_ID 列搜索,则两个索引都可以实现。但是,如果除这 2 个字段之外还查询 Department_Id,则只有 PK 索引才是理想的。
如果查询在 User_ID 和 Company_ID 上进行过滤,并且需要返回其他数据列,那么 PK 索引仍然是最好的,因为它可以处理所有数据。而非聚集索引则不需要,因此可能需要 Key Lookup 来提取效率不高的额外字段。
它对我来说看起来多余,所以我肯定会考虑删除它。
要查看索引是否实际被使用/了解使用水平,您可以运行各种索引使用统计脚本之一。一个很好的例子是here。