聚集索引列上的非聚集索引可以提高性能吗?

时间:2020-03-05 18:47:07  来源:igfitidea点击:

在SQL Server 2005中,查询分析器多次告诉我要在已经具有聚集索引的表的主ID列上创建非聚集索引。遵循此建议后,查询执行计划将报告查询应更快。

为什么同一列(具有相同的排序顺序)上的非聚集索引比聚集索引快?

解决方案

回答

聚集索引通常会更快,但我们只能有1个聚集索引。因此,如果表已经在不同的列上具有聚簇索引,那么非聚簇索引是我们最好的选择。

回答

我猜想在不需要完整的行数据的情况下这样做会更快,例如,如果我们只是在检查是否存在具有给定ID的行。然后,聚簇索引将非常庞大,而小的"一列"索引将更苗条。

回答

聚簇索引具有表的所有数据,而非聚簇索引仅具有列+聚簇索引的位置或者行(如果它在堆上)(没有聚簇索引的表)。因此,如果我们做一个count(column)并且该列使用非聚集索引建立索引,则SQL Server只需要扫描非聚集索引,该索引比聚集索引快,因为在8K页上可以容纳更多非聚集索引