在SQL Server 2005中,查询分析器多次告诉我要在已经具有聚集索引的表的主ID列上创建非聚集索引。遵循此建议后,查询执行计划将报告查询应更快。
为什么同一列(具有相同的排序顺序)上的非聚集索引比聚集索引快?
聚簇索引具有表的所有数据,而非聚簇索引仅具有列+聚簇索引的位置或行(如果它在堆上(没有聚簇索引的表))。因此,如果您做一个count(column)并且该列使用非聚集索引建立索引,则SQL Server只需要扫描非聚集索引,该索引比聚集索引快,因为在8K页上可以容纳更多非聚集索引
我猜想,在不需要完整的行数据的情况下,这样做会更快,例如,如果您只是在检查是否存在具有给定ID的行。然后,聚集索引将非常庞大,而小的“一列”索引将更苗条。
聚集索引通常会更快,但是您只能有1个聚集索引。因此,如果表已经具有在另一列上的聚集索引,那么最好是使用非聚集索引。