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. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...
随机推荐
- python + docker, 实现天气数据 从FTP获取以及持久化(一)
前情提要 最近项目需要天气数据(预报和历史数据)来作为算法程序的输入. 项目的甲方已经购买了天气数据, 依照他们的约定,天气数据的供应商会将数据以"文本" (.TXT)的方式发到F ...
- 将各种格式的数据转换成XML
public class DataToXml { /// <summary> /// 将DataTable对象转换成XML字符串 ...
- pythonNet day07
信号 一个进程向另外一个进程通过信号的方式传递某种讯息,接收方在接收到信号后作出相应的处理 查看信号:kill -l kill -signum PID 给PID的进程发送一个信号 信号名称:信号的名字 ...
- 常见报表的JS代码
1.合并单元格 这个表格在报表里面算是比较典型的 1.里面的表格的列标题现在是写死的,其实这些可以通过配置进行 2.至于如果表头要进行合并(这种需求比较少,也比较容易实现) 3.至于统计:最好在后台按 ...
- SecureCRT 8.1使用经验总结
1.反空闲设置: 2.文件上传下载 上传 sudo rz -y 文本文件勾选Upload files as ASCII,图片或其他飞文本文件,去掉勾选.采用默认binary 3.文件下载 sudo s ...
- python 阿里云短信群发推送
本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...
- c#正则获取html里面a标签href的值
获取单个a中href的值: string str = "<a href=\"http://www.itsve.com\">下载</a>" ...
- java过滤关键词
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- JSP中内置对象pageContent的使用
public class TestPageContext { public void getSomething(PageContext page){ ServletRequest request = ...
- 2015年传智播客JavaEE 第168期就业班视频教程17-登录功能业务逻辑实现(代码)
点击红色在业务层接口EmpEbi创建方法login 按F4弹出类继承层次视图 这些快捷键是条件反射了. 业务层做MD5数据加密,不能放在表现层也不能放在数据层必须放在业务层.它属于业务操作. 数据层的 ...