-
SQL Server索引优化常用查询
1.1、查找缺失索引
SELECT A.USER_SEEKS 查找次数,A.USER_SCANS 扫描次数, ROUND(A.AVG_TOTAL_USER_COST,2) 减少的用户查询的平均成本,A.AVG_USER_IMPACT 可能获得的平均百分比收益, ROUND((A.USER_SEEKS+A.USER_SCANS)*A.AVG_TOTAL_USER_COST*A.AVG_USER_IMPACT/100,2) 可能的改进优势, A.LAST_USER_SEEK 最近查找时间,A.LAST_USER_SCAN 最近扫描时间,C.[STATEMENT] 表名, 'CREATE INDEX [IDX_' +CONVERT(VARCHAR,A.GROUP_HANDLE)+'_'+CONVERT(VARCHAR,C.INDEX_HANDLE)+'_'+REPLACE(REPLACE(REPLACE(C.[STATEMENT],']',''),'[',''),'.','') +']'+' ON '+C.[STATEMENT]+ ' (' +ISNULL(C.EQUALITY_COLUMNS,'') +CASE WHEN NOT C.EQUALITY_COLUMNS IS NULL AND NOT C.INEQUALITY_COLUMNS IS NULL THEN ',' ELSE '' END +ISNULL(C.INEQUALITY_COLUMNS,'') +')' +ISNULL(' INCLUDE ('+C.INCLUDED_COLUMNS+')','') '创建语句' FROM sys.dm_db_missing_index_group_stats A INNER JOIN sys.dm_db_missing_index_groups B ON A.GROUP_HANDLE=B.INDEX_GROUP_HANDLE INNER JOIN sys.dm_db_missing_index_details C ON B.INDEX_HANDLE=C.INDEX_HANDLE WHERE C.DATABASE_ID=DB_ID() --默认当前数据库,若指定数据库则使用DB_ID(['DB_NAME']) ORDER BY ROUND(A.USER_SEEKS*A.AVG_TOTAL_USER_COST*A.AVG_USER_IMPACT/100,2) DESC
1.2、查找未使用索引
SELECT C.NAME 表名,B.INDEX_ID 索引ID,B.NAME 索引名, A.USER_SEEKS 搜索次数,A.USER_SCANS 扫描次数,A.USER_LOOKUPS 查找次数, A.USER_UPDATES 更新次数,E.TABLEROWS 表行数, 'DROP INDEX '+QUOTENAME(B.NAME)+' ON '+QUOTENAME(D.NAME)+'.'+QUOTENAME(OBJECT_NAME(A.OBJECT_ID)) '删除语句' FROM sys.dm_db_index_usage_stats A INNER JOIN sys.indexes B ON A.INDEX_ID=B.INDEX_ID AND A.OBJECT_ID=B.OBJECT_ID INNER JOIN sys.objects C ON A.OBJECT_ID=C.OBJECT_ID INNER JOIN sys.schemas D ON C.schema_id=D.schema_id INNER JOIN ( SELECT INDEX_ID,OBJECT_ID,SUM(ROWS) TABLEROWS FROM sys.partitions GROUP BY INDEX_ID,OBJECT_ID ) E ON A.INDEX_ID=E.INDEX_ID AND A.OBJECT_ID=E.OBJECT_ID WHERE OBJECTPROPERTY(A.OBJECT_ID,'IsUserTable')=1 AND A.DATABASE_ID=DB_ID() AND B.TYPE_DESC='NONCLUSTERED' AND B.IS_PRIMARY_KEY=0 AND B.IS_UNIQUE_CONSTRAINT=0 --AND C.NAME='INVMB' --根据实际修改表名 ORDER BY (A.USER_SEEKS+A.USER_SCANS+A.USER_LOOKUPS) ASC
当更新次数很大而搜索次数及扫描次数很小或为0时,说明该索引一直在更新但基本不被使用,因而也未对查询提供多少帮助,所以可以考虑删除。
1.3、查看索引使用情况
SELECT OBJECT_NAME(A.[OBJECT_ID]) 表名,B.INDEX_ID 索引ID,B.[NAME] 索引名称,B.[TYPE_DESC] 索引类型, A.USER_SEEKS+A.USER_SCANS+A.USER_LOOKUPS 读,A.USER_UPDATES 写,B.FILL_FACTOR 填充因子 FROM sys.dm_db_index_usage_stats A INNER JOIN sys.indexes B ON A.[OBJECT_ID]=B.[OBJECT_ID] AND A.INDEX_ID=B.INDEX_ID WHERE OBJECTPROPERTY(A.[OBJECT_ID],'ISUSERTABLE')=1 AND A.DATABASE_ID=DB_ID() --默认当前数据库,若指定数据库则使用DB_ID(['DB_NAME']) ORDER BY OBJECT_NAME(A.[OBJECT_ID]),A.USER_UPDATES DESC,A.USER_SEEKS+A.USER_SCANS+A.USER_LOOKUPS DESC
出处:https://www.cnblogs.com/atomy/p/15330442.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式