--查看表的索引使用情况
SELECT TOP 1000
o.name AS 表名
, i.name AS 索引名
, i.index_id AS 索引id
, dm_ius.user_seeks AS 搜索次数
, dm_ius.user_scans AS 扫描次数
, dm_ius.user_lookups AS 查找次数
, dm_ius.user_updates AS 更新次数
, p.TableRows as 表行数
, 'DROP INDEX ' + QUOTENAME(i.name)
+ ' ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(OBJECT_NAME(dm_ius.OBJECT_ID)) AS '删除语句'
FROM sys.dm_db_index_usage_stats dm_ius
INNER JOIN sys.indexes i ON i.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = i.OBJECT_ID
INNER JOIN sys.objects o ON dm_ius.OBJECT_ID = o.OBJECT_ID
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN (SELECT SUM(p.rows) TableRows, p.index_id, p.OBJECT_ID
FROM sys.partitions p GROUP BY p.index_id, p.OBJECT_ID) p
ON p.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = p.OBJECT_ID
WHERE OBJECTPROPERTY(dm_ius.OBJECT_ID,'IsUserTable') = 1
AND dm_ius.database_id = DB_ID()
--AND i.type_desc = 'nonclustered'--这里指定了索引的类型,聚集索引或者非聚集索引
AND i.is_primary_key = 0
AND i.is_unique_constraint = 0
and o.name='testtable'   --需要查找的表名
ORDER BY (dm_ius.user_seeks + dm_ius.user_scans + dm_ius.user_lookups) ASC

--查看数据库里表丢失的索引并生成建立索引的语句
SELECT t4.name,t1.[statement],t1.object_id, t2.user_seeks, t2.user_scans,
       t1.equality_columns, t1.inequality_columns,t1.included_columns,
    case 
       --when t1.equality_columns is null and charindex(',',t1.inequality_columns)=0 and t1.included_columns is null
       --    then   'create UNIQUE NONCLUSTERED INDEX IX_' + replace((replace((replace(t1.[statement],'[','_')),']','_')),'.','_') +'_'+ replace((replace((replace(isnull(t1.equality_columns,'1'),'[','_')),']','_')),'.','_') +'_' 
       --           +replace((replace((replace(isnull(t1.inequality_columns,'_2'),'[','_')),']','_')),'.','_') + ' ON '+ t1.[statement] + ' (' + t1.inequality_columns + ' ASC )'  
       when --t1.equality_columns is null and charindex(',',t1.inequality_columns)>0 and
       t1.included_columns is null
           then   'create  NONCLUSTERED INDEX IX_' + replace((replace((replace((replace(t1.[statement],'[','_')),']','_')),'.','_')),',','_') +'_'  
                  +replace(replace(replace(replace(replace(isnull(t1.equality_columns,'2'),' [',''),'[',''),'.',''),',',''),']','')
  +replace((replace((replace((replace(isnull(t1.inequality_columns,'2'),'[','')),']','')),'.','')),',','_') + ' ON '+ t1.[statement] + ' (' + 
    case  when t1.equality_columns is null then ' '
          when charindex(',',t1.equality_columns)=0 then t1.equality_columns +' ASC '
  when charindex(',',t1.equality_columns)>0 then replace(t1.equality_columns,',',' ASC,') + ' ASC ' 
 end
       +   
    case  when t1.equality_columns is not null and charindex(',',t1.inequality_columns)=0 then  ' ,'+t1.inequality_columns + ' ASC )'
when t1.equality_columns is null and charindex(',',t1.inequality_columns)=0 then  ' '+t1.inequality_columns + ' ASC )'
  when  t1.inequality_columns is null then ' )'
  when charindex(',',t1.inequality_columns) > 0 then ' ,'+ replace(t1.inequality_columns,',',' ASC,') + ' ASC )' 
  when  t1.equality_columns is null and charindex(',',t1.inequality_columns) > 0 then ' '+ replace(t1.inequality_columns,',',' ASC,') + ' ASC )'
     end
   when t1.included_columns is not null
        then   'create NONCLUSTERED INDEX IX_' + replace((replace((replace((replace(t1.[statement],'[','_')),']','_')),'.','_')),',','_') +'_'  
                  +replace(replace(replace(replace(replace(isnull(t1.equality_columns,'2'),' [',''),'[',''),'.',''),',',''),']','')
  +replace((replace((replace((replace(replace(isnull(t1.inequality_columns,'2'),' [',''),'[','')),']','')),'.','')),',','_') + ' ON '+ t1.[statement] + ' (' + 
    case  when t1.equality_columns is null then ' '
          when charindex(',',t1.equality_columns) = 0 then t1.equality_columns +' ASC '
  when charindex(',',t1.equality_columns) > 0 then replace(t1.equality_columns,',',' ASC,') + ' ASC ' 
 end
       +   
    case  when  t1.equality_columns is not null and charindex(',',t1.inequality_columns)=0 then ' ,'+t1.inequality_columns + ' ASC )'
when  t1.equality_columns is null and charindex(',',t1.inequality_columns)=0 then ' '+t1.inequality_columns + ' ASC )'
  when  t1.inequality_columns is null then ' )'
  when  t1.equality_columns is not null and charindex(',',t1.inequality_columns) > 0 then ' ,'+ replace(t1.inequality_columns,',',' ASC,') + ' ASC )' 
  when  t1.equality_columns is null and charindex(',',t1.inequality_columns) > 0 then ' '+ replace(t1.inequality_columns,',',' ASC,') + ' ASC )' 
     end
  + ' INCLUDE ( ' + t1.included_columns + ' )'
   
    end  as  '建立索引的语句'

FROM sys.dm_db_missing_index_groups AS t3
      join sys.dm_db_missing_index_details AS t1
       on  t1.index_handle = t3.index_handle
          join sys.dm_db_missing_index_group_stats AS t2
            on t2.group_handle = t3.index_group_handle
              join sys.databases AS t4 
                on t1.database_id = t4.database_id
      WHERE t1.database_id = DB_ID() --AND object_id = OBJECT_ID('interface.商户设备表')
      order by t2.user_seeks desc 
      
      --t4.name,t1.object_id

sqlserver查看索引使用情况以及建立丢失的索引的更多相关文章

  1. SQLserver查看索引使用情况

    查索引使用情况:    https://www.cnblogs.com/sunliyuan/p/6559354.html select db_name(database_id) as N'TOPK_T ...

  2. mysql如何查看索引使用情况以及优化 - guols0612

    mysql中支持hash和btree索引.innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引 我们可以通过下面语句查询当前索引使用情况: ...

  3. MySQL 5.7以后怎么查看索引使用情况?

    MySQL 5.7以后怎么查看索引使用情况? 0.在sys库中查看没用的索引 root@localhost [sys]>select * from schema_unused_indexes; ...

  4. SQL 数据优化之不建立索引的情况

    索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本.排序分组操作主要消耗的就是CPU资源和内存,所以能够在排序分组操作中好好的利用索引将会极大地降低CPU资源的 ...

  5. SqlServer之like、charindex、patindex 在有无索引的情况下分析

    1.环境介绍 测试环境 SQL2005 测试数据 200W条 2.环境准备 2.1建表 CREATE TABLE [dbo].[Depratments](         [Dep_id] [int] ...

  6. mysql 查看索引使用情况

    show status like 'Handler_read%'; Handler_read_key  代表着一个行被索引值读取的次数,值很低表明索引不经常用到,增加索引对性能改善不高. Handle ...

  7. MSSQL优化之——查看语句执行情况

    MSSQL优化之——查看语句执行情况 在写SQL语句时,必须知道语句的执行情况才能对此作出优化.了解SQL语句的执行情况是每个写程序的人必不可少缺的能力.下面是对查询语句执行情况的方法介绍. 一.设置 ...

  8. SQL Server 索引维护(1)——如何获取索引使用情况

    前言: 在前面一文中,已经提到了三类常见的索引问题,那么问题来了,当系统出现这些问题时,该如何应对? 简单而言,需要分析现有系统的行为,然后针对性地对索引进行处理: 对于索引不足的情况:检查缺少索引的 ...

  9. SQLServer查看和解决死锁的方法

    http://luohonghong.blog.163.com/blog/static/78312058201142411533316/ SQLServer查看和解决死锁的方法 2011-05-24 ...

随机推荐

  1. jsp中的c标签

    核心标签库 引用: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> ...

  2. (转)ecshop 后台商品分类添加图片的功能

    转之--http://blog.sina.com.cn/s/blog_4696b3760100n5ee.html   1 .首先找到数据表 ecs_category (商品分类表) 添加一 cat_i ...

  3. Ubuntu12.4 64位 安装 arm linux gcc 4.3.2

    一.下载arm linux gcc 4.3.2 http://pan.baidu.com/share/link?shareid=1575352696&uk=2754759285&fid ...

  4. java对mysql数据库进行单表筛选备份、还原操作

    最近在做的一个项目需要对mysql数据库中的单个表格进行备份 其中,一部分表格需要进行筛选备份(例如对最近插入的1000条记录进行备份) 思路:java调用系统命令完成备份操作 假设现在有数据库tes ...

  5. windows 7下安装python+mongodb

    1. python安装 下载:http://python.org/download/ 直接双击安装,安装完后将路径加入系统环境变量path中. 2. mongodb安装 下载:http://www.m ...

  6. Android动画 fillAfter和fillBefore

    fillBefore是指动画结束时画面停留在此动画的第一帧; fillAfter是指动画结束是画面停留在此动画的最后一帧. java代码设置如下: /*****动画结束时,停留在最后一帧******* ...

  7. sql -实验二

    8. 统计各部门下工资大于2000的雇员的平均工资. select avg(sal)from empwhere sal>2000;

  8. Spring4.0学习笔记(7) —— 通过FactoryBean配置Bean

    1.实现Spring 提供的FactoryBean接口 package com.spring.facoryBean; import org.springframework.beans.factory. ...

  9. Windows下命令行连接mysql及导入sql文件

    嗯,今天要把phpcms的模板放到服务器上,,,呃,phpMyAdmin死活连接不上数据库,这又是个神马情况无奈,又想到命令行了,好吧,最近喜欢上命令行了,不过这果然还是命令行强大啊,啊哈哈下面呢,我 ...

  10. 使用Code::Blocks配置Python编译环境

    1.先在CodeBlock中新建C或C++工程. CodeBlock新建工程步骤:File——New——Project——Console applications——C或C++都可——Project所 ...