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

问题描述 投票:10回答:3

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

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

sql-server indexing sql-server-2005
3个回答
16
投票

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


2
投票

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


-1
投票

聚集索引通常会更快,但是您只能有1个聚集索引。因此,如果表已经具有在另一列上的聚集索引,那么最好是使用非聚集索引。

© www.soinside.com 2019 - 2024. All rights reserved.