原文:如何获得SQL Server索引使用情况

原文出自:

http://www.mssqltips.com/sqlservertip/1239/how-to-get-index-usage-information-in-sql-server/

问题:

数据库有两大存储需要:数据页和索引页。在你的表中理解和查看实际的数据,是相当简单的。通过运行一些查询示例来了解哪些列被使用,以及什么类型的数据实际上是被存储。一方面,很难知道索引实际上是如何被使用和怎么使用的。所以你应该如何更好地理解索引的使用及正在发生什么操作(inserts,updates,deletes,selects)?

解决方案:

在SQLServer中,许多新的DMVs被引入,供你窥探一些过往版本中不能或很难看到的数据。其中一个新函数和一个新视图是提供索引使用情况:

Sys.dm_db_index_operational_stats和sys.dm_db_index_usage_stats

Sys.dm_db_index_operational_stats:

该函数提供关于insert/update/delete在特定索引上引起的信息。另外,这个视图同样提供关于锁、闩锁和访问方法的信息。它会返回很多列,但是重点关注下面几列:

  • leaf_insert_count –叶子级别插入的总数
  • leaf_delete_count -叶子级别删除的总数
  • leaf_update_count  -叶子级别更新的总数

以下例子的查询提供一些关于增、删、改操作的有用信息的关键列:

SELECT OBJECT_NAME(A.[OBJECT_ID]) AS [OBJECT NAME],


       I.[NAME] AS [INDEX NAME],


       A.LEAF_INSERT_COUNT,

       A.LEAF_UPDATE_COUNT,

       A.LEAF_DELETE_COUNT

FROM   SYS.DM_DB_INDEX_OPERATIONAL_STATS (NULL,NULL,NULL,NULL ) A


       INNER JOIN SYS.INDEXES AS I


         ON I.[OBJECT_ID] = A.[OBJECT_ID]


            AND I.INDEX_ID = A.INDEX_ID


WHERE  OBJECTPROPERTY(A.[OBJECT_ID],'IsUserTable') = 1

以下是输出情况,从这个函数中,我们可以得知有多少insert/update/delete操作发生在每个表和索引上。

Sys.dm_db_index_usage_stats:

这个视图提供关于你的索引的访问方法总览情况,下面的列在检查问题是比较有用:

  • user_seeks – 索引查找的次数。
  • user_scans- 索引扫描的次数。
  • user_lookups – 书签查找的次数。
  • user_updates – 增删改操作的次数。

SELECT   OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],


         I.[NAME] AS [INDEX NAME],


         USER_SEEKS,

         USER_SCANS,

         USER_LOOKUPS,

         USER_UPDATES

FROM     SYS.DM_DB_INDEX_USAGE_STATS AS S


         INNER JOIN SYS.INDEXES AS I


           ON I.[OBJECT_ID] = S.[OBJECT_ID]

              AND I.INDEX_ID = S.INDEX_ID


WHERE    OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1

以下是查询结果,从这个结果中可以得知有多少查找、扫描、书签查找和全部修改操作。

注意:

当SQLServer重启时这些值会清空,另外,sys.dm_db_index_operational_stats返回的值仅仅是只对缓存在堆(heap)或者索引的元数据对象有效。

如何获得SQL Server索引使用情况的更多相关文章

  1. SQL SERVER中什么情况会导致索引查找变成索引扫描

    SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致 ...

  2. 【译】SQL Server索引进阶第八篇:唯一索引

    原文:[译]SQL Server索引进阶第八篇:唯一索引     索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就 ...

  3. 转: SQL Server索引的维护 - 索引碎片、填充因子

    转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...

  4. SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>

    一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...

  5. SQL Server 索引结构及其使用(一)

    转载:SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clus ...

  6. SQL Server索引设计 <第五篇>

    SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列: 使用窄索引: 检查列的选择性: 检查列的数据类型: 考虑列顺序: 考虑索引类型(聚集索引OR非聚集索引): 一.检查 ...

  7. SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>

    实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多), ...

  8. SQL Server索引进阶:第九级,读懂执行计划

    原文地址: Stairway to SQL Server Indexes: Level 9,Reading Query Plans 本文是SQL Server索引进阶系列(Stairway to SQ ...

  9. SQL Server索引进阶:第八级,唯一索引

    原文地址: Stairway to SQL Server Indexes: Level 8,Unique Indexes 本文是SQL Server索引进阶系列(Stairway to SQL Ser ...

随机推荐

  1. a标签的背景图在ie8下不显示的问题

    突然发现临下班时候问题就多, 马上下班了被头头告知线上已经上线很久的活动现在有个兼容性问题, a标签的背景图在ie8下会有不显示的情况. 我自己找了台ie8的机器实验了一下, 发现一切正常, 但是在另 ...

  2. ecshop 后台添加 成本价 利润

    ecshop后台admin中的商品操作php文件,goods.php替换为下面的代码, 还要在数据库商品本店售价后门添加  cost  字段 为 商品成本价 ecs_goods表中添加  cost  ...

  3. java.util.concurrent.ThreadPoolExecutor

    java.util.concurrent.ThreadPoolExecutor An ExecutorService that executes each submitted task using o ...

  4. java它们的定义ArrayList序列, 大神跳跃

    一个list有两种类型的对象,今天有需求必须责令不同的约会对象,这里是代码 /** *@author xh1991101@163.com */ List<Message> messages ...

  5. 实现strcmp非常easy的思维

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void strcom(char *s ...

  6. BZOJ 2783 JLOI 2012 树 乘+二分法

    标题效果:鉴于一棵树和一个整数s,问中有树木几个这样的路径,点和担保路径==s,深度增量点. 这一数额的输出. 思维:用加倍的想法,我们可以O(logn)在时间找点他第一n.因为点权仅仅能是正的,满足 ...

  7. SqlServer保留几位小数的两种做法

    SqlServer保留几位小数的两种做法   数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 解决: 1. 使用 Round( ...

  8. 冒泡排序算法 C++和PHP达到

    冒泡排序是小元素向前或向后的大要素.两个相邻元件之间的比较结果更.交换也这两个元件之间发生.它是最慢的排序算法. 效率最低的算法. 时间复杂度: 它是最差时间复杂度为:O(n^2),冒泡排序最好的时间 ...

  9. 【oracle案件】ORA-19502,ORA-27072

    1.1.1. ORA-19502,ORA-27072 日期:2014-05-12 00:12 环境:试验机 [错误号] $ oerr ora 19502 19502, 00000, "wri ...

  10. UseCase事件描述叙事流规范

    文化/fasiondog 整理的用例需求编写规范.分享部分UseCase事件描述叙事流规范.其中.标准5~10.12来自哪里<编写有效用例>([美国] Alistair Cockburn ...