CHARPTER 3--INDEX DMVs
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的更多相关文章
- 译:Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息
注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...
- 译:SQL Server的Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息
注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...
- The Accidental DBA
The Accidental DBA (Day 1 of 30): Hardware Selection: CPU and Memory Considerations 本文大意: 全篇主要讲 ...
- 【译】The Accidental DBA:Troubleshooting Performance
最近重新翻看The Accidental DBA,将Troubleshooting Performance部分稍作整理,方便以后查阅.此篇是Part 2Part 1:The Accidental DB ...
- 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
原文:第七章--DMVs和DMFs(2)--用DMV和DMF监控索引性能 本文继续介绍使用DMO来监控,这次讲述的是监控索引性能.索引是提高查询性能的关键性手段.即使你的表上有合适的索引,你也要时时刻 ...
- MySQL 优化之 ICP (index condition pushdown:索引条件下推)
ICP技术是在MySQL5.6中引入的一种索引优化技术.它能减少在使用 二级索引 过滤where条件时的回表次数 和 减少MySQL server层和引擎层的交互次数.在索引组织表中,使用二级索引进行 ...
- 在v-for中利用index来对第一项添加class(vue2.0)
<li v-for="(el,index) in event" v-bind:class="{ 'm-swipe-active': !index}"> ...
- Ubuntu-server 下Apache2 配置.htaccess 隐藏thinkPHP项目index.php
需要开启Apache2的rewrite模块 1.打开/etc/apache2/apache2.conf 将文件中的AllowOverride None改为AllowOverride All 2.修改m ...
- SQL Server-聚焦强制索引查询条件和Columnstore Index(九)
前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...
随机推荐
- 灵活运用SMART原则梳理目标
1:立刻行动 执行力是老生常谈了,提高执行力不拖延,源自于对目标的充分理解和超出常人的坚持. 如何深刻理解目标?一方面要有基础的知识.能力积累,另一方面要灵活运用SMART原则从不同维度梳理目标. 2 ...
- 找到一篇关于2.4/5G信道的新介绍
关于部分手机无法搜索到5G wifi信号的解决方法第一次在论坛发基础理论贴,希望能普及关于5G wifi的基础知识. 发此贴的原因是基于本人突然发现:MX3刷了3.4.1系统后,搜索不 ...
- php通过COM类调用组件的实现代码
在PHP 4.2.0 至 4.2.3中,可以使用w32api_register_function 函数调用外部的DLL,前提是需要在php.ini中打开扩展的php_w32api.dll. 如果使用的 ...
- CFGym 101194L 题解
一.题目链接 http://codeforces.com/gym/101194/problem/L 二.题意 有4个队伍,要打6场比赛(刚好每两个队伍都能相互比一次),若A和B比赛有3种结果: A赢B ...
- 在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法
有时候只是简单的为了测试某个php函数的效果,以前总是需要建一个php文件,复制这个文件的路径,再通过web访问或者用php命令执行这个php文件. 一直想要怎么才能不用创建文件,才能直接执行PHP代 ...
- cmd,amd,umd 模块写法
mark一篇感觉写的不错的cmd/amd/umd的模块写法 原文:https://github.com/banricho/webLog/issues/12 umd通用写法: // jQuery 2.2 ...
- Nginx 文件下载资源配置
下面配置是针对所有.apk文件下载 本人 需要.apk文件 放在Linux里面作为下载, 放在/root目录下面出现403 Forbinden, (暂时不清楚), 放在其他目录正常 然后新建目录/re ...
- 8 MySQL--单表查询
单表查询: http://www.cnblogs.com/linhaifeng/articles/7267592.html 1.单表查询的语法 2.关键字的执行优先级(重点) 3.简单查询 4.whe ...
- sed的基础应用
sed是一个非交互式的文本编辑器:sed一行一行的处理文件 sed有模式空间(主要活动空间)和缓存空间(辅助空间)两个空间: 模式空间(pattern space)将文件中的一行内容读取到临时缓冲区( ...
- Bourne Shell:控制语句、条件判断、文本处理、常用命令
条件判断是一个程序获得智能的基础,而Bourne Shell脚本则通过命令 [ 来模拟大多数编程语言中的条件表达式. shell中支持的控制结构有: (1) if then else fi (2) f ...