Acc*_*_CO 6 index sql-server index-statistics
Microsoft 将[user_lookup]
计数器描述dm_db_index_usage_stats
为“用户查询的书签查找次数”。[singleton_lookup_count]
它将in描述dm_db_index_operational_stats
为“从索引或堆检索单行的累积计数”。这对我来说一点也不清楚。有人可以对这两个值所跟踪的内容提供更清晰的定义/区分吗?
这个问题源于今天的索引观察(800m 行表),其中[user_lookup]
Cx 的当前值约为 800,而[singleton_lookup_count]
超过 10 亿。显然,他们计算的是许多不同的事物,我需要了解它们是什么,以及这种程度的差异是否表明存在问题。
Pau*_*ite 10
这些计数器并不总是容易解释,原因我将很快解释。它们可以作为一个有用的指标,您可能需要更详细地分析某些领域。
这个问题源于今天的索引观察(800m 行表),其中 Cx 上的当前 [user_lookup] 值约为 800,[singleton_lookup_count] 超过 10 亿。
该值表示访问聚集索引或堆的user_lookup
书签查找运算符(Key或RID Lookup )在执行计划中出现了 800 次。
该值包括使用Key或RID Lookupsingleton_lookup_count
运算符查找的行数。它还计算对聚集索引的每个非查找的保证单行访问。当聚集索引是唯一的并且使用一个或多个相等查找谓词时,就会发生这种情况。
单例查找是保证最多找到一条匹配记录的 B 树遍历。对于应用于唯一索引的每个可查找相等谓词都是这种情况。
例如,如果是唯一索引键并且使用索引查找,select id from table where id in (1, 2, 3, 4)
则会导致四个单例查找。id
请注意,不使用书签查找。
Key或RID Lookup只不过是使用等式谓词的唯一索引查找,因此它们被视为相同。
即使基表是堆或聚集索引不唯一,查找也始终针对唯一的“索引”。对于堆,唯一的行定位符是堆 RID。对于非唯一聚集索引,唯一行定位符是聚集索引键加上任何“唯一符”(仅适用于实际重复的键)。
索引使用统计数据 DMV 包含从查询执行器(QE) 角度来看的索引操作计数。这是负责执行查询计划的 SQL Server 组件。
姓名 | 描述 |
---|---|
用户搜索 | Index Seek 运算符出现在已执行计划中的次数。 |
用户扫描 | 表扫描或索引扫描操作符出现在已执行计划中的次数。 |
用户查找 | RID 或键查找运算符出现在已执行计划中的次数。 |
这些计数器递增的方式并不完全直观:
索引操作统计数据 DMV 包含从存储引擎(SE)角度来看的索引和表操作的计数。
姓名 | 描述 |
---|---|
范围扫描计数 | 堆或索引结构上的范围扫描(包括无限制的完整扫描)的数量。 |
单例查找计数 | 堆或索引结构中的单例查找数。 |
此 DMV 对每个存储引擎操作进行计数,使计数器可能更直观:
有关显示每个计数器何时递增的示例,请参阅我的文章Seeking Without Indexes。