【发布时间】:2010-12-29 15:10:23
【问题描述】:
sys.dm_db_index_usage_stats DMV 提供有关 sql server 中索引的查找和扫描次数的信息
我有大量包含多列的复合索引。我怀疑这些索引会导致大量的维护开销,并且想缩小列数。
有没有一种方法可以找出针对复合索引中单个列的搜索和扫描。
【问题讨论】:
标签: sql-server composite-index
sys.dm_db_index_usage_stats DMV 提供有关 sql server 中索引的查找和扫描次数的信息
我有大量包含多列的复合索引。我怀疑这些索引会导致大量的维护开销,并且想缩小列数。
有没有一种方法可以找出针对复合索引中单个列的搜索和扫描。
【问题讨论】:
标签: sql-server composite-index
SQL Server 未实现 SKIP SCAN,因此对复合索引的查找始终包括索引的最左侧(前导)列。
也就是说,如果您在(col1, col2) 上有一个索引,则索引查找可用于搜索col1 或col1 和 col2,但不能用于搜索col2一个人。
如果您搜索所有这些列,您很可能会从使用索引中受益。
您提到的“维护开销”是什么?单列索引和多列索引之间有何区别?
【讨论】:
@Dave: 不,您无法从索引使用统计信息中分辨出来。这最好通过查看您的查询执行计划来完成。