MS SQL SERVER索引优化相关查询
查找缺失索引
-- =============================================-- Description: 查询当前数据库中缺失的索引,知道你进行优化的参考。-- =============================================SELECT user_seeks * avg_total_user_cost * ( avg_user_impact * 0.01 ) AS [index_advantage] ,migs.last_user_seek , --上一次访问时间mid.[statement] AS [Database.Schema.Table] ,--表mid.equality_columns , --等式判断列mid.inequality_columns ,--不等式判断列mid.included_columns ,--于查询的涵盖列的逗号分隔列表。有关涵盖列或包含列的详细信息migs.unique_compiles , --将从该缺失索引组受益的编译和重新编译数。许多不同查询的编译和重新编译可影响该列值migs.user_seeks , --由可能使用了组中建议索引的用户查询所导致的查找次数migs.avg_total_user_cost ,-- 可通过组中的索引减少的用户查询的平均成本migs.avg_user_impact --实现此缺失索引组后,用户查询可能获得的平均百分比收益。该值表示如果实现此缺失索引组,则查询成本将按此百分比平均下降。FROM sys.dm_db_missing_index_group_stats AS migs WITH ( NOLOCK )INNER JOIN sys.dm_db_missing_index_groups AS mig WITH ( NOLOCK ) ON migs.group_handle = mig.index_group_handleINNER JOIN sys.dm_db_missing_index_details AS mid WITH ( NOLOCK ) ON mig.index_handle = mid.index_handleWHERE mid.database_id = DB_ID()--默认当前数据库。如果自己定义的数据库则使用DB_ID ( [ 'database_name' ] )ORDER BY index_advantage DESC后续说明:
具有较高的 index_advantage 的索引那些 SQL 服务器认为会产生最大的积极影响,减少工作量,基于查询的成本和预期他们会使用索引的次数减少。
查看现有索引的使用情况
-- =============================================-- Description: 查询当前数据库中所有堆表、 聚集的索引和非聚集索引、 读取、 写入和每个索引的填充因子的数量,知道你进行优化的参考。--Index Read/Write stats (all tables in current DB)-- ============================================= SELECT OBJECT_NAME(s.[object_id]) AS [ObjectName] , i.name AS [IndexName] , i.index_id , user_seeks + user_scans + user_lookups AS [Reads] , user_updates AS [Writes] , i.type_desc AS [IndexType] , i.fill_factor AS [FillFactor]--填充因子 FROM sys.dm_db_index_usage_stats AS s INNER JOIN sys.indexes AS i ON s.[object_id] = i.[object_id] WHERE OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1 AND i.index_id = s.index_id AND s.database_id = DB_ID() ORDER BY OBJECT_NAME(s.[object_id]) , writes DESC , reads DESC ;这是一个有用的查询,为更好地了解数据库的工作负荷。它可以帮助您确定某个特定的索引的波动性和写入数据的读取的比率。这可以帮助您改进和优化您的索引策略。例如,如果您有一个表,是相当静态 (很少写入任何索引),你可能会更有信心有关添加更多的索引在你失踪的索引查询中列中。
如果您使用的是 SQL Server 2008 企业版,此查询可以帮助您决定是否会启用数据压缩 (页或行) 的好主意。具有很少写活动的索引很可能是更合适数据压缩比波动性更大的索引。
查询未使用的索引
-- =============================================-- Description: 查询当前数据库中所有未使用的索引,知道你进行优化的参考。本sql的意思是,表的索引在数据库中未被使用,作为你进行下一步删除的依据。其中也可以加入时间判断--List unused indexes-- =============================================SELECT OBJECT_NAME(i.[object_id]) AS [Table Name] ,i.nameFROM sys.indexes AS i INNER JOIN sys.objects AS o ON i.[object_id] = o.[object_id]WHERE i.index_id NOT IN( SELECT s.index_id FROM sys.dm_db_index_usage_stats AS s WHERE s.[object_id] = i.[object_id] AND i.index_id = s.index_id AND database_id = DB_ID() --下列条件作为时间判断,查看在某个时间之后未使用的索引列表,如果不需要可删除AND ( last_user_seek>='@DateTime' or --用户上次执行搜索时间 last_user_scan>='@DateTime' or --用户上次执行扫描时间 last_system_seek>='@DateTime' or --系统上次执行搜索的时间 last_system_scan>='@DateTime' --系统上次执行扫描的时间 )) AND o.[type] = 'U'ORDER BY OBJECT_NAME(i.[object_id]) ASC查询当前数据库中使用较少的索引或者写入次数大于读取次数的索引
-- =============================================-- Description: 查询当前数据库中使用较少的索引或者写入次数大于读取次数的索引,--此查询会寻找有大量的零的读取和写入的任何索引。任何属于此类别的索引是删除 (在充分调查) 的合适选择,指导你进行优化的参考。--Possible Bad NC Indexes (writes > reads)-- =============================================SELECT OBJECT_NAME(s.[object_id]) AS [Table Name] , i.name AS [Index Name] , --索引名称i.index_id , user_updates AS [Total Writes] ,--写入次数user_seeks + user_scans + user_lookups AS [Total Reads] ,--读取次数user_updates - ( user_seeks + user_scans + user_lookups ) AS [Difference]--写入与读取只差FROM sys.dm_db_index_usage_stats AS s WITH ( NOLOCK ) INNER JOIN sys.indexes AS i WITH ( NOLOCK ) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_idWHEREOBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1 AND s.database_id = DB_ID() AND user_updates > (user_seeks + user_scans + user_lookups ) AND i.index_id > 1 --聚集索引和非聚集索引ORDER BY [Difference] DESC , [Total Writes] DESC , [Total Reads] ASC ;MS SQL SERVER索引优化相关查询的更多相关文章
- sql server Service Broker 相关查询
sql server Service Broker 相关查询 -- 查看传输队列中的消息 --如果尝试从队列中移除时,列将表明哪里出现了问题 select * from sys.transmissio ...
- SQL Server 索引优化-----数据库引擎优化顾问
本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server ...
- 补充:sql server 中的相关查询、case函数
相关查询(在同一个表中) 相关查询类似子查询,但是又不同于子查询:子查询中的子条件可以单独查出数据,但是相关查询的子条件不能查处数据.(可以理解成C#中for的穷举法,第一个for走一个,第二个for ...
- SQL Server 索引优化 ——索引缺失
本文我们将重点给出动态视图法发现数据库中缺失的索引.对于索引的调整和新建将不在本文阐述范围,后续将陆续分享相关经验. sys.dm_db_missing_index_details 缺失索引明细,包括 ...
- SQL Server 索引优化——无用索引
我们知道,合理的索引能大幅提升性能,但冗余的索引也会降低数据库性能.随着我们业务的发展,数据库的中的表.表结构.查询的内容都有可能发生变化.这样,有的索引就可能不再使用了,需要删除(因为维护索引即浪费 ...
- sql server 索引优化
查询实际执行计划,看走的是那种查询 要根据需求,建立合适的索引 经常需要汇总的,可以建立包含索引 --drop index ix_smssend_created on smssent_1 ; crea ...
- sql server 索引碎片相关问题
1.查看表的索引碎片情况 --改成当前库 use DB_Name --创建变量 指定要查看的表 declare @table_id int set @table_id=object_id('Table ...
- sql server 索引分析相关sql
select object_id('dbo.FT_CFP_TRADE_SUBACCOUNT') select * from sys.partitions where [object_id]=14672 ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
随机推荐
- Github心得体会
Github是一个代码托管的网站,以前端的代码为主,还有很多互动. 在我的理解看来,github并不仅仅是一个代码库,你可以自由注册,推送自己一些感兴趣编写的源代码.它不是单纯的保存代码,更多的是让 ...
- Ubuntu下修改hosts文件
Ubuntu系统的Hosts只需修改/etc/hosts文件,修改完之后要重启网络.具体过程如下:1.修改hostssudo gedit /etc/hosts2.添加解析记录( . )或者从githu ...
- 斯坦福第十四课:降维(Dimensionality Reduction)
14.1 动机一:数据压缩 14.2 动机二:数据可视化 14.3 主成分分析问题 14.4 主成分分析算法 14.5 选择主成分的数量 14.6 重建的压缩表示 14.7 主成分分析法 ...
- PYTHON第三天
PYTHON之路 七.基本的if判断 最简单的流程处理: if ...else If简单练习: #!/usr/bin/env python # -*-coding:utf-8 -*- #if 基本表 ...
- 关于mysql占用CPU过高,问题解决
使用SHOW PROCESSLIST 查看 原因: 使用了 一个触发器 不断的去删除日志,保证每个用户的日志只有10条 去掉之后,CPU使用率从97% 降到了 %. 利用show columns fr ...
- redhat 6上nis配置
redhat 6上nis有点改动.在这里记一下 新装系统以后,首先要 yum install ypserv 安装ypserv的包 然后是设置 # 设置nis服务器名字 ypdomainname cen ...
- synchronized同步锁+单利模式
public static synchronized VolleyRequestController getInstance() { if (sInstance == null) { ...
- Android 开源项目维护者宣布退出
Android开源项目(Android Open Source Project,AOSP)的长期维护者Jean-Baptiste Quéru在Google+上宣布退出,他退出AOSP项目的原因被认为与 ...
- 用Nifi合并二个API、计算并生成新的API
1. 全景图 2. 合并 根据attribute合并flowfile: 合并 json, 并增加code,message等: 3. 计算方差: 在ExecuteScript里只能用纯pyt ...
- 编译生成.NET Core Framework遇到的问题
前两天在Windows Server 2012上编译生成.NET Core Framework的代码库corefx,遭遇了几个问题,在这篇博文中记录一下. 编译生成操作方法是在命令行(Develope ...