聚集索引列上的非聚集索引可以提高性能吗?
时间:2020-03-05 18:47:07 来源:igfitidea点击:
在SQL Server 2005中,查询分析器多次告诉我要在已经具有聚集索引的表的主ID列上创建非聚集索引。遵循此建议后,查询执行计划将报告查询应更快。
为什么同一列(具有相同的排序顺序)上的非聚集索引比聚集索引快?
解决方案
回答
聚集索引通常会更快,但我们只能有1个聚集索引。因此,如果表已经在不同的列上具有聚簇索引,那么非聚簇索引是我们最好的选择。
回答
我猜想在不需要完整的行数据的情况下这样做会更快,例如,如果我们只是在检查是否存在具有给定ID的行。然后,聚簇索引将非常庞大,而小的"一列"索引将更苗条。
回答
聚簇索引具有表的所有数据,而非聚簇索引仅具有列+聚簇索引的位置或者行(如果它在堆上)(没有聚簇索引的表)。因此,如果我们做一个count(column)并且该列使用非聚集索引建立索引,则SQL Server只需要扫描非聚集索引,该索引比聚集索引快,因为在8K页上可以容纳更多非聚集索引