sys.dm_db_missing_index_details DMV返回数据库标识符、对象标识符和缺失索引列。这些列通过等式、不等式和涵盖列进行分类。DMV能够和sys.dm_db_missing_index_columns将创建缺失索引的语句放在一起。单个缺失索引的所有数据返回到单个行中,这和sys.dm_db_missing_index_colum函数不一样,sys.dm_db_missing_index_colum函数是将数据分别返回到行每个行中。
例如,以下查询连接缺失索引动态管理视图,发现最有用的索引和创建索引的方法为: SELECT avg_user_impact……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
sys.dm_db_missing_index_details DMV返回数据库标识符、对象标识符和缺失索引列。这些列通过等式、不等式和涵盖列进行分类。DMV能够和sys.dm_db_missing_index_columns将创建缺失索引的语句放在一起。单个缺失索引的所有数据返回到单个行中,这和sys.dm_db_missing_index_colum函数不一样,sys.dm_db_missing_index_colum函数是将数据分别返回到行每个行中。
例如,以下查询连接缺失索引动态管理视图,发现最有用的索引和创建索引的方法为:
SELECT avg_user_impact AS average_improvement_percentage, avg_total_user_cost AS average_cost_of_query_without_missing_index, 'CREATE INDEX ix_' + [statement] + ISNULL(equality_columns, '_') + ISNULL(inequality_columns, '_') + ' ON ' + [statement] + ' (' + ISNULL(equality_columns, ' ') + ISNULL(inequality_columns, ' ') + ')' + ISNULL(' INCLUDE (' + included_columns + ')', '') AS create_missing_index_command FROM sys.dm_db_missing_index_details a INNER JOIN sys.dm_db_missing_index_groups b ON a.index_handle = b.index_handle INNER JOIN sys.dm_db_missing_index_group_stats c ON b.index_group_handle = c.group_handle WHERE avg_user_impact > = 40 |
单个索引的结果:
average improvement percentage 46.34 average cost of query without missing index 20.51871252 create missing index command CREATE INDEX
ix_[AdventureWorksDW].[dbo].[FactCurrencyRate]_[TimeKey]
ON [AdventureWorksDW].[dbo].[FactCurrencyRate] ( [TimeKey]) INCLUDE ([CurrencyKey], [AverageRate], [EndOfDayRate], [full_date])
虽然用户能够修改性能提高的百分比,但以上查询返回所有能够将性能提高40%或更高的索引。索引名称格式化还能够根据你的命名规范(naming convention)进行修改。
可能会事与愿违,sys.dm_db_missing_index_details DMV的"statement"列返回的是用来创建缺失索引的对象。对象返回格式为DatabaseName.OwnerName.ObjectName。有意思的是,DMV还返回数据库标识符和对象标识符列,所以你还能够通过对返回列申请DB_NAME()和OBJECT_NAME()函数推断对象名称。
注意,由于SQL Server最后才启动,缺失索引动态管理视图只表示能够对查询有好处的索引数据。这就是说每次你重启SQL Server时,所有缺失索引信息就都丢了。如果你想载很长一段时间内收集并检测同样的数据,你可以复制用户表每个动态管理视图的内容。
对数据库管理员来说,缺失索引特性是一种性能调整工具。但是它还不时一个十全十美的解决方案。管理员还要检测缺失索引DMV的内容并仔细考虑创建推荐索引的成本和好处。如果你的查询包括等式或不等式操作的多个列,例如缺失索引特性不能提供CREATE INDEX语句的列顺序。你需要检测受益于缺失索引的查询并决定索引键的顺序,这样每个索引的效能就会有很大的差异。
最后,考虑到索引能够加快SELECT查询速度的同时,它还会对INSERT、UPDATE以及DELETE语句造成负面的影响。这是因为随着表中数据的不断增加、更改和清除,SQL Server必须用内存来维护索引键。更多有关缺失索引特性局限性的信息,请查询SQL Server 2008 Books Online。
作者
Baya Dewald,数据库咨询师,主要帮助客户用SQL Server和Analysis Services开发高可用的和升级应用软件。在他的职业生涯中,他负责过管理过数据库管理员团队等工作。Baya主要专攻领域有:性能调优、复制和数据仓储。你可以通过baya@bayasqlconsulting.com跟他联系。
翻译
相关推荐
-
SQL Server 2005支持服务结束 升级何去何从
SQL Server 2005的支持就要结束了,就在2016年4月12日,SQL Server 2005的客户们应该升级了。
-
SQL Server 2005即将终止服务 你准备好了么?
2016年4月12日,微软将正式终止SQL Server 2005相关服务。微软正在终止扩展支持,这意味着不再有新特性更新,什么都没了。
-
利用SQL DMV管理SQL Server数据库
在SQL Server 2005中,微软公司引入了SQL 动态管理视图(简称DMV),还引入了动态管理函数(简称DMF)。
-
解决SQL服务器提示属性IsLocked不可用于登录用户的错误
在SQL Server中,权限的分配很重要。特别是在用户数量众多的数据库里面,用户权限,架构的划分经常会导致权限之间的冲突,导致无法登陆。