1. --可添加索引的字段
  2. SELECT top 100 migs.user_seeks,migs.avg_total_user_cost,migs.avg_user_impact,migs.last_user_seek
  3. ,mid.statement ,mid.equality_columns ,mid.included_columns,mid.inequality_columns,migs.unique_compiles
  4. FROM sys.dm_db_missing_index_group_stats migs (nolock)
  5. inner join sys.dm_db_missing_index_groups mig (nolock) on migs.group_handle=mig.index_group_handle
  6. inner join sys.dm_db_missing_index_details mid (nolock) on mig.index_handle=mid.index_handle
  7. inner join sys.objects so (nolock) on mid.object_id=so.object_id
  8. inner join sys.databases sd (nolock) on mid.database_id=sd.database_id
  9. where so.is_ms_shipped=0
  10. and sd.name = DB_NAME()
  11. order by migs.avg_total_user_cost desc
  12.  
  13. --查看无用索引
  14. SELECT ind.index_id ,
  15. obj.name AS TableName ,
  16. ind.name AS IndexName ,
  17. ind.type_desc ,
  18. indUsage.user_seeks ,
  19. indUsage.user_scans ,
  20. indUsage.user_lookups ,
  21. indUsage.user_updates ,
  22. indUsage.last_system_seek ,
  23. indUsage.last_user_scan ,
  24. 'drop index [' + ind.name + '] ON [' + obj.name + ']' AS DropIndexCommand
  25. FROM sys.indexes AS ind (nolock)
  26. INNER JOIN sys.objects AS obj(nolock) ON ind.object_id = obj.object_id
  27. LEFT JOIN sys.dm_db_index_usage_stats indUsage(nolock)
  28. ON ind.object_id = indUsage.object_id AND ind.index_id = indUsage.index_id
  29. WHERE ind.type_desc <> 'HEAP'
  30. AND obj.type <> 'S'
  31. AND OBJECTPROPERTY(obj.object_id, 'isusertable') = 1
  32. AND ( ISNULL(indUsage.user_seeks, 0) = 0
  33. AND ISNULL(indUsage.user_scans, 0) = 0
  34. AND ISNULL(indUsage.user_lookups, 0) = 0
  35. )
  36. ORDER BY obj.name ,ind.name
  37.  
  38. SELECT
  39. o.name
  40. , indexname=i.name
  41. , i.index_id
  42. , reads=user_seeks + user_scans + user_lookups
  43. , writes = user_updates
  44. , rows = (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id)
  45. , CASE
  46. WHEN s.user_updates < 1 THEN 100
  47. ELSE 1.00 * (s.user_seeks + s.user_scans + s.user_lookups) / s.user_updates
  48. END AS reads_per_write
  49. , 'DROP INDEX ' + QUOTENAME(i.name)
  50. + ' ON ' + QUOTENAME(c.name) + '.' + QUOTENAME(OBJECT_NAME(s.object_id)) as 'drop statement'
  51. FROM sys.dm_db_index_usage_stats s
  52. INNER JOIN sys.indexes i ON i.index_id = s.index_id AND s.object_id = i.object_id
  53. INNER JOIN sys.objects o on s.object_id = o.object_id
  54. INNER JOIN sys.schemas c on o.schema_id = c.schema_id
  55. WHERE OBJECTPROPERTY(s.object_id,'IsUserTable') = 1
  56. AND s.database_id = DB_ID()
  57. AND i.type_desc = 'nonclustered'
  58. AND i.is_primary_key = 0
  59. AND i.is_unique_constraint = 0
  60. AND (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id) > 10000
  61. ORDER BY reads
  62.  
  63. -- 返回最经常被修改的20个索引
  64. SELECT top 20 *
  65. FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL)
  66. order by leaf_insert_count+leaf_delete_count+leaf_update_count desc
  67. GO
  68.  
  69. -- 返回当前数据库所有碎片率大于25%的索引
  70. -- 运行本语句会扫描很多数据页面
  71. -- 避免在系统负载比较高时运行
  72. SELECT
  73. DB_NAME() as DB_NAME
  74. ,OBJECT_NAME(s.object_id) as OBJECT_NAME
  75. ,i.name index_name
  76. ,i.type_desc
  77. ,s.index_type_desc
  78. ,s.alloc_unit_type_desc
  79. ,s.page_count
  80. ,s.fragment_count
  81. ,s.avg_fragment_size_in_pages
  82. ,s.avg_fragmentation_in_percent
  83. FROM sys.dm_db_index_physical_stats (db_id(), NULL, NULL, NULL, NULL) s,sys.indexes i
  84. WHERE s.object_id=i.object_id and s.index_id=i.index_id
  85. AND avg_fragmentation_in_percent>25
  86. order by avg_fragmentation_in_percent desc
  87.  
  88. --索引页类型及使用情况
  89. SELECT
  90. OBJECT_NAME(OBJECT_ID) AS 表名
  91. ,OBJECT_ID AS 对象ID
  92. ,SUM(reserved_page_count) AS 已分配页数
  93. ,SUM(used_page_count) AS 使用页数
  94. ,SUM(CASE WHEN index_id < 2
  95. THEN in_row_data_page_count+lob_used_page_count+row_overflow_used_page_count
  96. ELSE lob_used_page_count+row_overflow_used_page_count END) AS 数据页数
  97. ,SUM(CASE WHEN index_id < 2 THEN row_count ELSE 0 END) AS 行数
  98. FROM sys.dm_db_partition_stats
  99. WHERE OBJECT_ID IN(SELECT OBJECT_ID FROM sys.objects where type = 'U')
  100. GROUP BY OBJECT_ID
  101.  
  102. SELECT object_name(object_id) AS 表名
  103. ,object_id AS 对象ID
  104. ,partition_number,filegroup_id,type_desc
  105. ,CASE WHEN index_id=0 THEN '堆索引(无聚集索引)'
  106. WHEN index_id=1 THEN '聚集索引'
  107. WHEN index_id BETWEEN 2 AND 250 THEN '非聚集索引'
  108. ELSE 'text/image' END AS 存储方式
  109. ,total_pages AS 已分配页数
  110. ,used_pages AS 使用页数
  111. ,data_pages AS 数据页数
  112. ,rows AS 行数
  113. ,first_page,root_page,first_iam_page
  114. FROM sys.partitions p
  115. inner join sys.system_internals_allocation_units s on p.hobt_id=s.container_id
  116. WHERE OBJECT_ID IN(SELECT OBJECT_ID FROM sys.objects where type = 'U')
  117. -- AND index_id in (0,1)
  118.  
  119. --各表索引页的记录情况(指定表,否则太久)
  120. SELECT o.name,
  121. ips.partition_number,
  122. ips.index_type_desc,
  123. ips.index_level,
  124. ips.page_count,
  125. ips.record_count,
  126. ips.compressed_page_count
  127. FROM sys.dm_db_index_physical_stats ( DB_ID(), NULL, NULL, NULL, 'DETAILED') ips
  128. INNER JOIN sys.objects o on o.object_id = ips.object_id
  129. WHERE o.name ='table'
  130. ORDER BY o.name,ips.partition_number DESC;
  131. /*
  132. sys.dm_db_index_physical_stats (
  133. { database_id | NULL | 0 | DEFAULT }
  134. , { object_id | NULL | 0 | DEFAULT }
  135. , { index_id | NULL | 0 | -1 | DEFAULT }
  136. , { partition_number | NULL | 0 | DEFAULT }
  137. , { mode | NULL | DEFAULT }
  138. )
  139. */
  140.  
  141. --各表索引的页页操作情况
  142. select DB_NAME(database_id) DBName
  143. ,object_name(s.object_id) tabletName
  144. ,i.name indexName
  145. ,partition_number
  146. ,leaf_insert_count
  147. ,leaf_delete_count
  148. ,leaf_update_count
  149. ,range_scan_count
  150. ,singleton_lookup_count
  151. ,row_lock_count
  152. ,row_lock_wait_count
  153. ,page_lock_count
  154. ,page_lock_wait_count
  155. from sys.dm_db_index_operational_stats (db_id(), NULL, NULL, NULL) s
  156. inner join sys.indexes i on i.object_id = s.object_id and i.index_id = s.index_id
  157. where objectproperty(s.object_id,'IsUserTable') = 1
  158. order by tabletName,indexName,partition_number
  159.  
  160. --(两次执行结果间)表的访问次数统计
  161. select object_name(i.object_id) tabletName,isnull(sum(range_scan_count+singleton_lookup_count),0) as [read]
  162. from sys.dm_db_index_operational_stats (db_id(), NULL, NULL, NULL) s
  163. right join sys.indexes i on i.object_id = s.object_id and i.index_id = s.index_id
  164. where objectproperty(i.object_id,'IsUserTable') = 1
  165. and object_name(i.object_id) not like 'conflict%'
  166. and exists(SELECT 1 FROM sys.tables t(nolock) WHERE i.object_id=t.object_id and is_ms_shipped=0)
  167. group by object_name(i.object_id)
  168. order by tabletName

SQLServer 维护脚本分享(10)索引的更多相关文章

  1. SQLServer 维护脚本分享(05)内存(Memory)

    --查看设置的最大最小每次 exec sp_configure 'max server memory (MB)' exec sp_configure 'min server memory (MB)' ...

  2. SQLServer 维护脚本分享(06)CPU

    --CPU相关视图 SELECT * FROM sys.dm_os_sys_info SELECT * FROM sys.dm_exec_sessions SELECT * FROM sys.sysp ...

  3. SQLServer 维护脚本分享(07)IO

    sp_helpfile --当前数据库文件分配情况 sp_spaceused --当前db空间大小(有时不准) sp_spaceused 'dbo.user' --指定表的空间大小(有时不准) sp_ ...

  4. SQLServer 维护脚本分享(09)相关文件读取

    /********************[读取跟踪文件(trc)]********************/ --查看事件类型描述 SELECT tc.name,te.trace_event_id, ...

  5. SQLServer 维护脚本分享(11)部分DBCC及系统存储过程

    --DBCC命令与用法 DBCC HELP('?') DBCC HELP('useroptions') DBCC USEROPTIONS WITH NO_INFOMSGS --当前DB的区及文件 DB ...

  6. SQLServer 维护脚本分享(04)服务器角色和数据库角色相关操作

    /*------------------------------------------------------------------------------------ [服务器级别-服务器角色] ...

  7. SQLServer 维护脚本分享(08)临时数据库(tempdb)

    dbcc sqlperf(logspace) --各数据库日志大小及使用百分比 dbcc loginfo --查看当前数据库的虚拟日志文件 --临时表'Tempdb'最近使用情况 SELECT t1. ...

  8. sqlserver 生成脚本执行创建索引

    create or alter proc SP_CreateIndex as begin if exists(select * from sys.objects where name='execsql ...

  9. SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享

    SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...

随机推荐

  1. 关于C语言中的转义字符

    1.转义字符的分类 1. 1一般转义字符 这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符.常用的一般转义字符为: \a     \n     \t     \v     \b     \r ...

  2. JavaScript高级程序设计学习笔记--引用类型

    Object类型 对象字面量表示法: var person={ name:"Nicholas", age:29, 5:true }; 这人例子会创建一个对象,包含三个属性:name ...

  3. 【linux】配置SSH免密码登陆

    1.输入ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 其中''里的是登陆的密码,因为要设置免密码,所以''里是什么都没有的,空格也不行 2.输入 cat ~/.ss ...

  4. POJ 1753 Flip game ( 高斯消元枚举自由变量)

    题目链接 题意:给定一个4*4的矩阵,有两种颜色,每次反转一个颜色会反转他自身以及上下左右的颜色,问把他们全变成一种颜色的最少步数. 题解:4*4的矩阵打表可知一共有四个自由变元,枚举变元求最小解即可 ...

  5. 运行Myeclipse发生这事这是怎么回事,大神们

  6. 汉企学习4个半月的target and plan

    我自从大学毕业以后,工作飘忽不定,其中也不乏有我自己的原因.IT是我向往的行业,几经波折,我来到了汉企. 9月4号,算是正式与汉企接触的第一天.在这里,我看到了学员的上进,老师的责任心,让我感受颇深. ...

  7. 读取Spring的配置文件applicationContext.xml的5种方法

    1.利用ClassPathXmlApplicationContext,这种方式配置文件应该放在类包同路径下Java代码: ApplicationContext ct=new ClassPathXmlA ...

  8. 两个viewport的故事(第二部分)

    原文:http://www.quirksmode.org/mobile/viewports2.html 在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如&l ...

  9. python以指定宽度及格式输出字符串

  10. ssh -v root@xxxxx 显示登录的细节

    [root@ok .ssh]# ssh -v root@10.100.2.84 OpenSSH_5.3p1, OpenSSL Feb debug1: Reading configuration dat ...