SQL Server 索引优化 ——索引缺失

Posted footleg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 索引优化 ——索引缺失相关的知识,希望对你有一定的参考价值。

本文我们将重点给出动态视图法发现数据库中缺失的索引。对于索引的调整和新建将不在本文阐述范围,后续将陆续分享相关经验。

sys.dm_db_missing_index_details 缺失索引明细,包括相等列,不等列以及包含列,执行如下脚本,并查看结果

USE WideWorldImporters;
GO
SELECT * FROM sys.dm_db_missing_index_details;


从结果可以看出,所有数据库中,缺失索引的表或索引视图都被列出来了。但是否需要把列出来的缺失索引都直接建上去呢?显然,这样做可能不但不能提升性能,还可能会导致性能下降。如,

有些查询是偶发性的,使用率极低,而对应的表又有大量的插入、更新等;

或者某些索引的创建对性能本身提升不多;

又或者,缺失索引的列,在某些存储的索引中已经部分包含,按照缺失索引给出信息去创建,会造成索引冗余。

结合以上情形,如果我们想补缺失索引,那么我们还需要知道缺失索引使用的频率,对性能的提升等信息。动态视图sys.dm_db_missing_index_group_stats 给出了我们需要的信息,下面我们给出缺失索引的状态

SELECT OBJECT_NAME(m.OBJECT_ID) tableName,equality_columns,inequality_columns,included_columns
,unique_compiles,user_seeks,user_scans,avg_user_impact,avg_system_impact
FROM sys.dm_db_missing_index_details m
LEFT JOIN sys.dm_db_missing_index_groups g ON m.index_handle=g.index_handle
LEFT JOIN sys.dm_db_missing_index_group_stats s ON g.index_group_handle=s.group_handle
WHERE m.database_id=DB_ID();
我们可以根据上面查询的结果,用户查找、用户扫描次数,用户性能影响,初步判断需要的索引。最终还要根据已经存在的索引,以及索引创建的一些规则,确定需要新创建的索引。

以上是关于SQL Server 索引优化 ——索引缺失的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server调优系列基础篇(索引运算总结)

SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行)

SQL SERVER全面优化-------索引有多重要?

SQL Server 索引优化-----数据库引擎优化顾问

SQL Server 2008 Management Studio 的缺失索引功能

建议收藏15755字,讲透MySQL性能优化(包含MySQL架构存储引擎调优工具SQL索引建议等等)