关于SQLserver的索引的一些脚本

--判断无用的索引:
SELECT TOP 30
        DB_NAME() AS DatabaseName ,
        ‘[‘ + SCHEMA_NAME(o.Schema_ID) + ‘]‘ + ‘.‘ + ‘[‘
       + OBJECT_NAME(s.[object_id]) + ‘]‘ AS TableName ,
        i.name AS IndexName ,
        i.type AS IndexType ,
       s.user_updates ,
       s.system_seeks + s.system_scans + s.system_lookups AS [System_usage]
FROM    sys.dm_db_index_usage_stats s
        INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]
                                    AND s.index_id = i.index_id
        INNER JOIN sys.objects o ON i.object_id = O.object_id
WHERE   s.database_id = DB_ID()
        AND OBJECTPROPERTY(s.[object_id], ‘IsMsShipped‘) = 0
        AND s.user_seeks = 0
AND s.user_scans = 0
        AND s.user_lookups = 0
        AND i.name IS NOT NULL
ORDER BY s.user_updates DESC ;

---判断哪些索引缺失: 

SELECT TOP 30
       ROUND(s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
                                                           + s.user_scans ),
             0) AS [Total Cost] ,
        s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
                                                              + s.user_scans ) AS Improvement_Measure ,
        DB_NAME() AS DatabaseName ,          d.[statement] AS [Table Name] ,
        equality_columns ,
        inequality_columns ,
        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
WHERE   s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
                                                              + s.user_scans ) > 10
ORDER BY [Total Cost] DESC ,
        s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
                                                      + s.user_scans ) DESC  

---看看那些索引维护成本很高 通俗的说就是更新次数大于使用这个索引的次数
SELECT TOP 20
        DB_NAME() AS DatabaseName ,
        ‘[‘ + SCHEMA_NAME(o.Schema_ID) + ‘]‘ + ‘.‘ + ‘[‘
        + OBJECT_NAME(s.[object_id]) + ‘]‘ AS TableName ,
        i.name AS IndexName ,
        i.type AS IndexType ,
        ( s.user_updates ) AS update_usage ,
        ( s.user_seeks + s.user_scans + s.user_lookups ) AS retrieval_usage ,
        ( s.user_updates ) - ( s.user_seeks + user_scans + s.user_lookups ) AS maintenance_cost ,
        s.system_seeks + s.system_scans + s.system_lookups AS system_usage ,
        s.last_user_seek ,
        s.last_user_scan ,
        s.last_user_lookup
FROM    sys.dm_db_index_usage_stats s
        INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]
                                    AND s.index_id = i.index_id
        INNER JOIN sys.objects o ON i.object_id = O.object_id
WHERE   s.database_id = DB_ID(‘{0}‘)
        AND i.name IS NOT NULL
        AND OBJECTPROPERTY(s.[object_id], ‘IsMsShipped‘) = 0
   AND ( s.user_seeks + s.user_scans + s.user_lookups ) > 0
ORDER BY maintenance_cost DESC;

----常常使用的索引查看 看看你常用使用的索引是否建立的合理
SELECT TOP 20
DB_NAME() AS DatabaseName
, ‘[‘+SCHEMA_NAME(o.Schema_ID)+‘]‘+‘.‘+‘[‘+OBJECT_NAME(s.[object_id]) +‘]‘AS TableName
, i.name AS IndexName
, i.type as IndexType
, (s.user_seeks + s.user_scans + s.user_lookups) AS Usage
, s.user_updates
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]
AND s.index_id = i.index_id
INNER JOIN sys.objects o ON i.object_id = O.object_id
WHERE s.database_id = DB_ID()
AND i.name IS NOT NULL
AND OBJECTPROPERTY(s.[object_id], ‘IsMsShipped‘) = 0
ORDER BY Usage DESC

  

时间: 2024-10-12 11:49:42

关于SQLserver的索引的一些脚本的相关文章

SQLSERVER聚集索引与非聚集索引的再次研究(下)

原文:SQLSERVER聚集索引与非聚集索引的再次研究(下) SQLSERVER聚集索引与非聚集索引的再次研究(下) 上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了. 这篇文章只是作为参考,里面的观点不一定正确 上篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(上) 下篇主要说非聚集索引 先上非聚集索引的结构图 先创建Department8表 1 --非聚集索引 2 USE [pratice] 3 GO 4 5 CREATE TAB

SQLSERVER聚集索引与非聚集索引的再次研究(上)

原文:SQLSERVER聚集索引与非聚集索引的再次研究(上) SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻辑严谨性, 单写<SQLSERVER聚集索引与非聚集索引的再次研究(上)>就用了12个小时,两篇文章加起来最起码写了20个小时, 本人非常非常用心的努力完成这两篇文章,希望各位看官给点意见o(∩_∩)o 为了搞清楚索引内部工作原理和结构

sqlserver导出带数据的脚本

说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server 2008中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本. 步骤: 右击需要导出数据的数据库,在弹出式菜单中选择"任务"下的"生成脚本"选项 在第二步选择"高级选项"如果不是2008(R2)的选择 "编写数据的脚本"选择为TRUE,这里默认是为FALSE的 ,   是2008(R2)的选择"要编写的脚本的数据的类

人人都是 DBA(XIII)索引信息收集脚本汇编

什么?有个 SQL 执行了 8 秒! 哪里出了问题?臣妾不知道啊,得找 DBA 啊. DBA 人呢?离职了!!擦!!! 程序员在无处寻求帮助时,就得想办法自救,努力让自己变成 "伪 DBA". 索引 找出哪些表的 Index 需要改进 在指定数据库中查找哪些表的 Index 需要改进 根据缓存的查询计划判断 SP 是否需要优化 发现那些 Index 的写远多于读的表 查看 Index 的 Statistics 最后更新时间 查看哪些 Index 被修改的最频繁 查看 Index 碎片化

sqlserver查看索引使用情况以及建立丢失的索引

--查看表的索引使用情况SELECT TOP 1000o.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 '

SQLServer 事务复制中使用脚本添加某个对象的发布

原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N'ReplicationName', @article = N'MyObject', @source_owner = N'dbo', @source_object = N'MyObject', @destination_owner = N'dbo', @destination_table = N'M

SqlServer执行大的数据库脚本出错解决方法

如果执行线上项目拷下来sqlserver的.sql的数据库脚本文件,如果文件较大时,那么就会报错内存不足之类的. 这时可以在命令提示符使用命令来执行脚本文件.切记,执行前先改一下数据库存放位置! 命令:osql -S . ,1433 -U sa -P 123 -i C:\Users\Cheng\Desktop\sqlScript\sqlScript.sql 如果提示不支持osql,那么把osql改成sqlcmd. 原文地址:https://www.cnblogs.com/heheblog/p/1

【sqlserver】索引

索引概念 索引是与视图关联的磁盘或内存中结构,可以加快从表或视图中的检索速度.索引包含由表或视图中的一列或多列生成的键. 索引特点 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能. 索引不足 创建索引和维护索引要

统计elasticsearch中月每天索引量的脚本

随着业务量的不断上升,最近一段时间需要对生产环境中的elasticsearch集群中的历史索引数据做迁移,而在做迁移前需要对被迁移的elasticsearch索引数据做统计用于迁移后的验证统计,所以就写了一个脚本用于es数据中查询历史索引的量生成报表文件,而在其中有使用过jq工具用于取数,jq的介绍可以查看http://jim123.blog.51cto.com/4763600/1966964: #!/bin/bash #es_count_report.sh #used for elastics