MSSQL统计数据知识点备忘
统计数据
- 使用
dbcc show_statistics('数据库名', 统计数据名)查看特定统计数据的详细信息 - 重点观察统计数据的histogram部分信息,此处决定估算的时候的行数和内存
- 查询的时候需要分配内存,如果统计数据的估算行数和实际的行数相差过大则会导致空间浪费或者将数据溢出到tempdb中(溢出行为非常影响性能,可以通过查询计划当中的感叹号部分分析)
- 建议开启自动数据更新,如果2016及以上版本建议开启动态的更新(增加更新频率)
- 建议使用异步统计数据的更新,如果是同步的,则会导致当前的查询被阻塞,反之则使用过期的统计数据查询,统计数据后台异步更新
- 索引的统计数据只包含最左边列的统计数据,所以如果查询的时候使用了非最左侧的列,则可能会自动创建列级别的统计数据(自动创建的统计数据通常以
_WA开头,尽量改名,方便维护),然后根据列级别的统计数据来生成查询计划(注意这种情况仅出现在其他索引包含了搜索列的时候) - 统计数据对于没有在直方图当中出现的键值会极低的估算行数,从而导致选择非常差的查询计划(比如出现大量的key lookup操作)
- 开启数据库的T2371追踪标记(对于大表默认的更新策略非常保守,导致会出现很差的查询计划)
- 索引会自动创建统计信息
- 需要手动删除非必要的统计信息
- 直方图当中最多有200个桶
常用的sql
- 使用
1 | |
查看数据库是否开启了自动更新和异步更新统计数据
- 使用
1 | |
开启1所示的功能
3. 使用
1 | |
来分析从上一次统计数据更新到现在为止有多少次数据修改,如果过多可以手动触发统计数据的更新,查看mod count列