Ran*_*der 5 sql-server dynamic-management-views
我正在修改创建查询以查找缺少的索引.我已经在他们的SQL Server DMV Starter Pack电子书中采用了Red-Gate人员创建的基本查询,并对其进行了一些修改.有几列sys.dm_db_missing_index_group_stats我不知道如何解释.他们是:
avg_total_user_cost
avg_user_impact
Run Code Online (Sandbox Code Playgroud)
根据文档,我发现avg_total_user_cost定义为表示每次执行用户查询时的平均总用户成本.并且,avg_user_impact 将值表示为百分比.它显示了创建索引时可以获得的改进量.
我的查询说应该添加的索引显示2.22平均用户成本和99.82用户影响.这些数字到底意味着什么?这是否意味着添加索引,我可以将关联查询的速度提高99.82%.我不知道2.22可能意味着什么.
谢谢.
我对这些的解释是:
avg_total_user_cost是可能从创建缺失索引组中获益的所有查询的当前平均值."成本"是由优化器计算的无单位值.请参阅:SQL SERVER - 执行计划 - 估计的I/O成本 - 估计的CPU成本 - 无单位
avg_user_impact是表示创建缺失索引组时所有查询的平均成本减少的百分比.百分比越高,新指数的收益就越大.
@Joe 的答案似乎是正确的,我只是添加了一些可能有用的信息:
有一篇文章在这里使用此计算得到全部测试冲击值:
avg_total_user_cost * avg_user_impact * (migs.user_seeks + migs.user_scans))
Run Code Online (Sandbox Code Playgroud)
这是他们建议的查询:
SELECT CONVERT (varchar, getdate(), 126) AS runtime,
mig.index_group_handle, mid.index_handle,
CONVERT (decimal (28,1), migs.avg_total_user_cost * migs.avg_user_impact *
(migs.user_seeks + migs.user_scans)) AS improvement_measure,
'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' +
CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + '
(' + ISNULL (mid.equality_columns,'')
+ CASE WHEN mid.equality_columns IS NOT NULL
AND mid.inequality_columns IS NOT NULL
THEN ',' ELSE '' END + ISNULL (mid.inequality_columns, '')
+ ')'
+ ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
migs.*,
mid.database_id,
mid.[object_id]
FROM sys.dm_db_missing_index_groups AS mig
INNER JOIN sys.dm_db_missing_index_group_stats AS migs
ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid
ON mig.index_handle = mid.index_handle
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC
Run Code Online (Sandbox Code Playgroud)
结果improvement_measure是无单位的,即仅在相对意义上有用,但这应该有助于将不同的值组合dm_db_missing_index_group_stats成有用的东西来做出决策。
| 归档时间: |
|
| 查看次数: |
3742 次 |
| 最近记录: |