Sql缺失索引查询,自动创建执行语句

news/2024/5/7 6:12:41/文章来源:https://blog.csdn.net/yangyifan0/article/details/137608388

 

 试图查询确实的索引

CREATE VIEW [dbo].[vw_Index_MissingIndex] ASSELECT  '[' + d.name + ']' as DBName,[dbo].[fn_Index_CreateIndexName](mid.equality_columns,mid.Inequality_columns,mid.index_handlE) AS ID,REPLACE(mid.equality_columns,',',' ASC,') AS equality_columns,REPLACE(mid.Inequality_columns,',',' ASC,') AS Inequality_columns,mid.Included_columns,mid.[statement]FROM sys.dm_db_missing_index_details as midINNER JOIN sys.databases don d.database_id = mid.database_idGO

给索引命名 

CREATE FUNCTION [dbo].[fn_Index_CreateIndexName] (@equality_columns NVARCHAR(4000), @Inequality_columns NVARCHAR(max), @index_handlE INT) RETURNS VARCHAR(max)ASBEGINdeclare @IndexName NVARCHAR(MAX)SET @IndexName = ISNULL(@equality_columns,@Inequality_columns)SET @IndexName = LTRIM(REPLACE(@IndexName,'[','_'))SET @IndexName = RTRIM(REPLACE(@IndexName,']','_'))SET @IndexName = REPLACE(@IndexName,',','')SET @IndexName = REPLACE(@IndexName,'_ _','_')IF LEN(@IndexName) > 120BEGINSET @IndexName = SUBSTRING(@IndexName,0,120)END  SET @IndexName = @IndexName + CAST(@index_handlE AS NVARCHAR(15))RETURN @IndexName ENDGO

创建索引语句,按查询表方式返回

/*注意@DBNAME 为[数据库名字]*/ 
create PROCEDURE [dbo].[usp_Index_MissingIndexCreationStatements](@DBNAME VARCHAR(100))ASDECLARE @IndexCreationPlaceholder_Start  AS NVARCHAR(MAX)DECLARE @IndexCreationPlaceholder_End  AS NVARCHAR(MAX)-- PREPARE PLACEHOLDERSET @IndexCreationPlaceholder_Start = 'IF NOT EXISTS (SELECT * FROM {2}.sys.indexes WHERE [name] = ''IX_{0}'' )    BEGINCREATE NONCLUSTERED INDEX [IX_{0}] ON {1}';SET @IndexCreationPlaceholder_End = ' WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF,ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)ON [PRIMARY]END;' + char(13) + char(10)-- STATEMENT CREATIONSELECT DBName,CASEWHEN NOT mid.equality_columns IS NULL AND NOT mid.Inequality_columns IS NULL THENREPLACE(REPLACE(REPLACE(@IndexCreationPlaceholder_Start,'{0}', mid.ID),'{1}',mid.[statement]),'{2}',mid.DBName)+ '( ' + COALESCE(mid.equality_columns,'') + ' ASC,' + COALESCE(mid.Inequality_columns,'') + ' ASC )' +COALESCE('INCLUDE ( ' + mid.Included_columns + ' ) ','')+ @IndexCreationPlaceholder_EndWHEN mid.equality_columns IS NULL AND NOT mid.Inequality_columns IS NULL THENREPLACE(REPLACE(REPLACE(@IndexCreationPlaceholder_Start,'{0}', mid.ID),'{1}',mid.[statement]),'{2}',mid.DBName)+ ' ( ' + COALESCE(mid.Inequality_columns,'') +  ' ASC ) ' +COALESCE('INCLUDE ( ' + mid.Included_columns + ' ) ','')+ @IndexCreationPlaceholder_EndWHEN NOT mid.equality_columns IS NULL AND mid.Inequality_columns IS NULL THENREPLACE(REPLACE(REPLACE(@IndexCreationPlaceholder_Start,'{0}', mid.ID),'{1}',mid.[statement]),'{2}',mid.DBName)+ ' ( ' + COALESCE(mid.equality_columns,'') +  ' ASC) '+COALESCE('INCLUDE ( ' + mid.Included_columns + ' ) ','')+ @IndexCreationPlaceholder_EndELSE NULLEND AS Index_Creation_Statement,' DROP INDEX [IX_' + mid.ID  + '] ON ' + mid.[statement]   + char(13) + char(10) AS Index_Drop_Statement FROM [dbo].[vw_Index_MissingIndex] AS midWHERE DBName = @DBNAME GO

创建索引,直接打印为日志,复制日志直接执行

 create PROCEDURE [dbo].[usp_Index_MissingIndexCreationStatements_PRINT](@DBNAME VARCHAR(100))ASDECLARE @IndexCreationPlaceholder_Start  AS NVARCHAR(MAX)DECLARE @IndexCreationPlaceholder_End  AS NVARCHAR(MAX)-- PREPARE PLACEHOLDERSET @IndexCreationPlaceholder_Start = 'IF NOT EXISTS (SELECT * FROM {2}.sys.indexes WHERE [name] = ''IX_{0}'' )    BEGINCREATE NONCLUSTERED INDEX [IX_{0}] ON {1} ';SET @IndexCreationPlaceholder_End = ' WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF,ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)ON [PRIMARY]END;' + char(13) + char(10)-- STATEMENT CREATIONdeclare @Index_Creation_Statement varchar(max)declare @Index_Drop_Statement varchar(max)SELECT CASEWHEN NOT mid.equality_columns IS NULL AND NOT mid.Inequality_columns IS NULL THENREPLACE(REPLACE(REPLACE(@IndexCreationPlaceholder_Start,'{0}', mid.ID),'{1}',mid.[statement]),'{2}',mid.DBName)+ '( ' + COALESCE(mid.equality_columns,'') + ' ASC,' + COALESCE(mid.Inequality_columns,'') + ' ASC ) ' +  char(13) + char(10) + '' +COALESCE('INCLUDE ( ' + mid.Included_columns + ' ) ','')+ @IndexCreationPlaceholder_EndWHEN mid.equality_columns IS NULL AND NOT mid.Inequality_columns IS NULL THENREPLACE(REPLACE(REPLACE(@IndexCreationPlaceholder_Start,'{0}', mid.ID),'{1}',mid.[statement]),'{2}',mid.DBName)+ ' ( ' + COALESCE(mid.Inequality_columns,'') +  ' ASC ) ' + COALESCE('INCLUDE ( ' + mid.Included_columns + ' ) ','')+ @IndexCreationPlaceholder_EndWHEN NOT mid.equality_columns IS NULL AND mid.Inequality_columns IS NULL THENREPLACE(REPLACE(REPLACE(@IndexCreationPlaceholder_Start,'{0}', mid.ID),'{1}',mid.[statement]),'{2}',mid.DBName)+ ' ( ' + COALESCE(mid.equality_columns,'') +  ' ASC) '+COALESCE('INCLUDE ( ' + mid.Included_columns + ' ) ','')+ @IndexCreationPlaceholder_EndELSE NULLEND AS Index_Creation_Statement,' DROP INDEX [IX_' + mid.ID  + '] ON ' + mid.[statement]   + char(13) + char(10) AS Index_Drop_Statement INTO #TEST_INDEX_TMP FROM [dbo].[vw_Index_MissingIndex] AS midWHERE DBName = @DBNAMEDECLARE INDEX_CURSOR CURSOR FOR SELECT * FROM #TEST_INDEX_TMPOPEN INDEX_CURSORfetch NEXT FROM INDEX_CURSOR into @Index_Creation_Statement,@Index_Drop_Statementprint 'use' + @DBNAMEprint 'Go'while @@FETCH_STATUS  = 0 beginprint @Index_Creation_Statementprint 'Go'fetch NEXT FROM INDEX_CURSOR into @Index_Creation_Statement,@Index_Drop_Statement;endclose INDEX_CURSORdeallocate INDEX_CURSORSELECT * FROM #TEST_INDEX_TMPTRUNCATE TABLE #TEST_INDEX_TMP;DROP TABLE #TEST_INDEX_TMP;GO

执行

exec [usp_Index_MissingIndexCreationStatements_PRINT] '[TEST]'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1045818.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置(Windows)下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具: 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题,笔者因此认为代码版本管理工具对于提高团队…

基于FPGA的以太网相关文章导航

首先需要了解以太网的一些接口协议标准,常见的MII、GMII、RGMII时序,便于后续开发。 【必读】从MII到RGMII,一文了解以太网PHY芯片不同传输接口信号时序! 介绍一款比较老的以太网PHY芯片88E1518,具有RGMII接口&#xf…

防止狗上沙发,写一个浏览器实时识别目标检测功能

家里有一条狗🐶,很喜欢乘人不备睡沙发🛋️,恰好最近刚搬家 狗迎来了掉毛期 不想让沙发上很多毛。所以希望能识别到狗,然后播放“gun 下去”的音频📣。 需求分析 需要一个摄像头📷 利用 chrome…

openHarmony 如何从API9升级到API10

最近用从官方下载的DevEco Studio3.1开发小app, 需要用到第三方库,加载第三方库,并添加代码,编译时如下错误: hvigor Finished :entry:defaultGenerateMetadata… after 3 ms hvigor ERROR: Failed :entry:defaultMergeProfile… …

微信小程序页面交互综合练习 (重点:解决“setData of undefined”报错问题)

一、写一个注册表单,点击“注册”按钮将用户输入的数据带到服务器,并且能在控制台显示参数。 (1)首先,我需要在vscode里面创建一个简易的node.js服务器 //第一步:引入http模块 var http require(http); //第二步:创建…

算法刷题Day30 | 332.重新安排行程、51. N皇后、37. 解数独

目录 0 引言1 重新安排行程1.1 我的解题1.2 更好的解法 2 N皇后2.1 我的解题 3 解数独3.1 我的解题3.2 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:算法刷题Day30 | 332.重新安排行程、51. N皇后、37. …

【图论】详解链式前向星存图法+遍历法

细说链式前向星存图法 首先要明白,链式前向星的原理是利用存边来进行模拟图。 推荐左神的视频–建图、链式前向星、拓扑排序 比方说有这样一张图,我们用链式前向星来进行模拟时,可以将每一条边都进行编号,其中,红色的…

刷题DAY49 | LeetCode 121-买卖股票的最佳时机 122-买卖股票的最佳时机II

121 买卖股票的最佳时机(easy) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取…

【前端面试3+1】10 npm run dev 发生了什么、vue的自定义指令如何实现、js的数据类型有哪些及其不同、【最长公共前缀】

一、npm run dev发生了什么 运行npm run dev时,通常是在一个基于Node.js的项目中,用来启动开发服务器或者执行一些开发环境相关的任务。下面是一般情况下npm run dev会执行的步骤: 1. 查找package.json中的scripts字段: npm会在项…

双指针,滑动窗口

今天也是闲来无事,想去做一下,之前学过的某个题型,但是在中间突然发现了这个题,那时候年少无知,做不出来,今天也是很轻松的用双指针轻松拿捏,因此发帖。 传送门:逛画展 题解&#x…

VRRP虚拟路由实验(华为)

思科设备参考:VRRP虚拟路由实验(思科) 一,技术简介 VRRP(Virtual Router Redundancy Protocol)是一种网络协议,用于实现路由器冗余,提高网络可靠性和容错能力。VRRP允许多台路由器…

官网下载IDE插件并导入IDE

官网下载IDEA插件并导入IDEA 1. 下载插件2. 导入插件 1. 下载插件 地址:https://plugins.jetbrains.com/plugin/21068-codearts-snap/versions 说明:本次演示以IDEA软件为例 操作: 等待下载完成 2. 导入插件 点击File->setting->Pl…

数据仓库与数据挖掘(第三版)陈文伟思维导图1-5章作业

第一章 概述 8.基于数据仓库的决策支持系统与传统决策支持系统有哪些区别? 决策支持系统经历了4个阶段。 1.基本决策支持系统 是在运筹学单模型辅助决策的基础上发展起来的,以模型库系统为核心,以多模型和数据库的组合形成方案辅助决策。 它…

2024年第八届人工智能与虚拟现实国际会议(AIVR 2024)即将召开!

2024年第八届人工智能与虚拟现实国际会议(AIVR 2024)将2024年7月19-21日在日本福冈举行。人工智能与虚拟现实的发展对推动科技进步、促进经济发展、提升人类生活质量等具有重要意义。AIVR 2024将携手各专家学者,共同挖掘智能与虚拟的无限可能…

利用Sentinel解决雪崩问题(二)隔离和降级

前言: 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了,不管是线程隔离还是熔断降级,都是对客户端(调…

图片管理系统:原理、设计与实践

title: 图片管理系统:原理、设计与实践 date: 2024/4/9 20:04:25 updated: 2024/4/9 20:04:25 tags: 图片管理存储组织上传采集处理编辑搜索检索展示分享AI应用 第一章:图片管理系统概述 1.1 图片管理系统简介 图片管理系统是一种用于存储、组织、处理…

rocketmq和rabbitmq总是分不清?

1. 官方解答 摘自百度搜索: 2. 通俗易懂的回答

【unity】【C#】UGUI组件

文章目录 UI是什么对UI初步认识 UI是什么 UI是用户界面(User Interface)的缩写,它是用户与软件或系统进行交互的界面。UI设计旨在提供用户友好的界面,使用户能够轻松地使用软件或系统。UI设计包括界面的布局、颜色、字体、图标等…

爬虫逆向实战(40)-某江酒店登陆(AES、MD5)

一、数据接口分析 主页地址:某江酒店 1、抓包 通过抓包可以发现数据接口是/api/member/login 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现,有TDFingerprint、blackBoxMd5、password和sw四个加密参数&#x…

Java快速入门系列-6(数据库编程与JDBC)

第六章:数据库编程与JDBC 6.1 SQL基础6.1.1 SQL基本结构与命令6.1.2 SQL高级查询6.1.3 SQL子查询与联接6.2 JDBC原理与使用6.2.1 JDBC驱动程序与URL6.2.2 Statement、PreparedStatement与CallableStatement6.2.3 数据库事务处理6.3 数据库连接池6.4 事务管理6.1 SQL基础 SQL(…