1.查找最重要的缺失的索引 

--=======================================================
--查找最重要的缺失的索引
SELECT TOP(20)
DB_NAME() AS DBName,
ROUND(s.avg_total_user_cost*s.avg_user_impact
*(S.user_seeks+S.user_scans),0) AS [TotalCost],
D.[statement] AS TableName,
D.equality_columns,
D.inequality_columns,
D.included_columns
INTO #TB1
FROM sys.dm_db_missing_index_groups G
INNER JOIN sys.dm_db_missing_index_group_stats S
ON S.group_handle=G.index_group_handle
INNER JOIN sys.dm_db_missing_index_details D
ON D.index_handle=G.index_handle EXEC sp_MSforeachdb '
USE [?]
INSERT INTO #TB1
SELECT TOP(20)
DB_NAME() AS DBName,
ROUND(s.avg_total_user_cost*s.avg_user_impact
*(S.user_seeks+S.user_scans),0) AS [TotalCost],
D.[statement] AS TableName,
D.equality_columns,
D.inequality_columns,
D.included_columns
FROM sys.dm_db_missing_index_groups G
INNER JOIN sys.dm_db_missing_index_group_stats S
ON S.group_handle=G.index_group_handle
INNER JOIN sys.dm_db_missing_index_details D
ON D.index_handle=G.index_handle
ORDER BY TotalCost DESC'

PS:

avg_total_user_cost:Average cost of the user queries that could be reduced by the index in the group.
avg_user_impact :Average percentage benefit that user queries could experience if this missing index group was implemented. The value means that the query cost would on average drop by this percentage if this missing index group was implemented.

user_seeks :Number of seeks caused by user queries that the recommended index in the group could have been used for.Not the number of times the index has been accessed.
user_scans :Number of scans caused by user queries that the recommended index in the group could have been used for.
参考:http://msdn.microsoft.com/zh-cn/library/ms345421.aspx

2. 查找无用索引

--==============================================================
--查找无用的索引,当索引使用次数和索引更新次数比在一个很小范围时,
--应该考虑该索引是否合理。 --在SQL SERVER DMVs IN ACTION书中判断无用索引的标注是
--S.[user_seeks]=0 AND S.[user_scans]=0 AND s.[user_lookups]=0
--该标准会将更新过于频繁但会偶尔使用的索引排出在外。 --因此还是建议使用索引使用次数和索引更新次数比,该比值可以自行调整
--============================================================== SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT
DB_NAME() AS DBName,
SCHEMA_NAME(O.[Schema_ID]) AS SchemaName,
OBJECT_NAME(O.[Object_ID]) AS TableName,
I.[name] AS IndexName,
S.[user_Updates],
(S.system_seeks+S.system_scans+s.system_lookups) AS [SystemUsage],
(S.[user_seeks]+S.[user_scans]+s.[user_lookups]) AS [UserUsage]
INTO #UnusedIndexes
FROM sys.dm_db_index_usage_stats S
INNER JOIN sys.indexes I
ON I.[object_id]=S.[object_id]
AND I.[index_id]=S.[index_id]
INNER JOIN sys.objects O
ON O.[object_id]=I.[object_id]
WHERE 1=2 EXEC sp_MSForeachDB '
use [?];
INSERT INTO #UnusedIndexes
SELECT TOP(20)
DB_NAME() AS DBName,
SCHEMA_NAME(O.[Schema_ID]) AS SchemaName,
OBJECT_NAME(O.[Object_ID]) AS TableName,
I.[name] AS IndexName,
S.[user_Updates],
(S.system_seeks+S.system_scans+s.system_lookups) AS [SystemUsage],
(S.[user_seeks]+S.[user_scans]+s.[user_lookups]) AS [UserUsage]
FROM sys.dm_db_index_usage_stats S
INNER JOIN sys.indexes I
ON I.[object_id]=S.[object_id]
AND I.[index_id]=S.[index_id]
INNER JOIN sys.objects O
ON O.[object_id]=I.[object_id]
WHERE S.[database_id]=DB_ID()
AND OBJECTPROPERTY(s.[object_id],''ISMSShipped'')=0
AND (S.[user_seeks]+S.[user_scans]+s.[user_lookups])*1.0/(S.[user_Updates]+1)<0.3
AND I.name IS NOT NULL
ORDER BY S.[user_Updates] DESC
' SELECT TOP(100)* FROM #UnusedIndexes
ORDER BY S.[user_Updates] DESC DROP TABLE #UnusedIndexes

参考:http://msdn.microsoft.com/zh-cn/library/ms188755.aspx

3. 查找碎片较多的索引

--=================================================================
--查看索引碎片最高的索引
--运行在LIMITIED模式来减少对系统的影响
--参考连接:http://technet.microsoft.com/zh-cn/library/ms188917.aspx --=================================================================
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT DB_NAME() AS DBName,
SCHEMA_NAME(O.[Schema_ID]) AS SchemaName,
OBJECT_NAME(O.[Object_id]) AS ObjectName,
I.name AS IndexName,
ROUND(S.avg_fragmentation_in_percent,2) AS [FragmentationPercent]
INTO #TempFragmentation
FROM sys.dm_db_index_physical_stats(db_id(),null,null,null,null) AS S
INNER JOIN sys.indexes I
ON I.[Object_ID]=S.[Object_id]
AND I.[Index_id]=S.[Index_id]
INNER JOIN sys.objects O
ON O.[object_Id]=I.[object_id]
WHERE S.[database_id]=DB_ID()
AND I.[name] IS NOT NULL
AND OBJECTPROPERTY(O.[object_id],'ISMSShipped')=0
AND 1=2
ORDER BY [FragmentationPercent] DESC EXEC SP_MSFOREACHDB '
USE [?];
INSERT INTO #TempFragmentation
SELECT TOP(20)
DB_NAME() AS DBName,
SCHEMA_NAME(O.[Schema_ID]) AS SchemaName,
OBJECT_NAME(O.[Object_id]) AS ObjectName,
I.name AS IndexName,
ROUND(S.avg_fragmentation_in_percent,2) AS [FragmentationPercent] FROM sys.dm_db_index_physical_stats(db_id(),null,null,null,null) AS S
INNER JOIN sys.indexes I
ON I.[Object_ID]=S.[Object_id]
AND I.[Index_id]=S.[Index_id]
INNER JOIN sys.objects O
ON O.[object_Id]=I.[object_id]
WHERE S.[database_id]=DB_ID()
AND I.[name] IS NOT NULL
AND OBJECTPROPERTY(O.[object_id],''ISMSShipped'')=0
ORDER BY [FragmentationPercent] DESC
' SELECT TOP(20)*
FROM #TempFragmentation
ORDER BY [FragmentationPercent] DESC DROP TABLE #TempFragmentation

4. 查看索引的统计信息

--==========================================================
--查看统计的状态信息
--==========================================================
SELECT
SS.[name] AS SchemaName,
ST.[name] AS TableName,
STATS_DATE(S.ID,S.IndID) AS StatisticsLastUpdated,
S.rowcnt AS [RowCount],
s.rowmodctr AS [NumberOfChanges],
ROUND(s.rowmodctr*1.0/s.rowmodctr*100,2) AS [RowChangedPercent]
FROM sys.sysindexes S
INNER JOIN sys.tables ST
ON ST.[object_id]=S.[id]
INNER JOIN sys.schemas SS
ON ss.[Schema_id]=ST.[schema_id]
WHERE S.ID>100
AND S.indid>0
AND s.rowcnt>=500

CHARPTER 3--INDEX DMVs的更多相关文章

  1. 译:Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息

    注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...

  2. 译:SQL Server的Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息

    注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...

  3. The Accidental DBA

    The Accidental DBA (Day 1 of 30): Hardware Selection: CPU and Memory Considerations 本文大意:      全篇主要讲 ...

  4. 【译】The Accidental DBA:Troubleshooting Performance

    最近重新翻看The Accidental DBA,将Troubleshooting Performance部分稍作整理,方便以后查阅.此篇是Part 2Part 1:The Accidental DB ...

  5. 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能

    原文:第七章--DMVs和DMFs(2)--用DMV和DMF监控索引性能 本文继续介绍使用DMO来监控,这次讲述的是监控索引性能.索引是提高查询性能的关键性手段.即使你的表上有合适的索引,你也要时时刻 ...

  6. MySQL 优化之 ICP (index condition pushdown:索引条件下推)

    ICP技术是在MySQL5.6中引入的一种索引优化技术.它能减少在使用 二级索引 过滤where条件时的回表次数 和 减少MySQL server层和引擎层的交互次数.在索引组织表中,使用二级索引进行 ...

  7. 在v-for中利用index来对第一项添加class(vue2.0)

    <li v-for="(el,index) in event" v-bind:class="{ 'm-swipe-active': !index}"> ...

  8. Ubuntu-server 下Apache2 配置.htaccess 隐藏thinkPHP项目index.php

    需要开启Apache2的rewrite模块 1.打开/etc/apache2/apache2.conf 将文件中的AllowOverride None改为AllowOverride All 2.修改m ...

  9. SQL Server-聚焦强制索引查询条件和Columnstore Index(九)

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

随机推荐

  1. [Android] 开发第五天

    布之前开发的 Android 电话拨号器 Android-Studio 已经带了发布菜单, Build -> Generate Signed APK 进入发布界面 我们新增一个证书,或者使用已有 ...

  2. 利用spring的ApplicationListener实现springmvc容器的初始化加载

    1.我们在使用springmvc进行配置的时候一般初始化都是在web.xml里面进行的,但是自己在使用的时候经常会测试一些数据,这样就只有加载spring-mvc.xml的配置文件来实现.为了更方便的 ...

  3. Asp.net 页面传值的方法

    ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方 ...

  4. 存在继承关系的Java类对象之间的类型转换(一)

      类似于基本数据类型之间的强制类型转换. 存在继承关系的父类对象和子类对象之间也可以 在一定条件之下相互转换. 这种转换需要遵守以下原则: 1.子类对象可以被视为是其父类的一个对象2.父类对象不能被 ...

  5. centos7开发环境配置总结

    1.win10下SecureCRT SSH连接慢 2.CentOS 7下Samba服务器的安装与配置 3.

  6. kettle——入门操作-行列转换(行转列,字段拆分)

      1.Row Normaliser,将一行多列数据转换为多行一列数据. 输入数据流: 计算器配置如下: 与计算器相连接的excel输出如下: Row Normaliser,设置如下, 与Row No ...

  7. to_char 函数将小数点舍掉的解决办法

    to_char(val,'0.9') 9 代表一个数字 0 强制显示0 $ 放置一个$符 L 放置一个浮动本地货币符 . 显示小数点 , 显示千位指示符

  8. 好记性不如烂笔头-linux学习笔记4apache相关知识

    apache 启动有2种模式 1是prefork模式,每个进程对应一个线程,如果是比较稳定的平台,那么prefork模式是worker模式 比较好,效率高,但是吃的内存比较大. 2 如果是高负载高并发 ...

  9. echart改变legend样式及分页

    legend: { type: 'scroll', orient: 'horizontal', bottom:0, left:'center', itemGap: 0, itemWidth: 10, ...

  10. Eclipse can not find the tag library descriptor for http://java.sun.com/jsf/*

    问题页面: <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ ta ...