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

 

 试图查询确实的索引

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.mzph.cn/news/805758.shtml

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

相关文章

Redis面试题1

Redis基础概念 1.请简述Redis是什么? 答:Redis是一个开源的使用ANSI C语言编写的、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值&#xff0…

《C++程序设计》阅读笔记【7-堆和拷贝构造函数】

🌈个人主页:godspeed_lucip 🔥 系列专栏:《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C程序设计获取下载链接。 1 堆与拷贝构造函数1.1 概述1.2 分配堆对象1.3 拷贝构造函数1.3.1 默…

301永久重定向与302临时重定向的正确运用

我们前不久有Hostease的客户的网站进行了域名更改。客户想了解域名更改后会有哪些后果和影响。一般网站域名更换后会遇到旧页面失效问题。为了优化用户体验和维护搜索引擎优化(SEO),我们需要正确地使用301永久重定向和302临时重定向。这两种重定向方式各有其特点和适…

本地linux怎样先亚马逊云服务器上传文件

使用亚马逊云服务器的密钥&#xff0c;并通过srp命令&#xff0c; 连接上传&#xff1a; scp -i <密钥文件路径> <本地文件路径> <远程主机用户名><远程主机地址>:<目标路径> scp -i assig2.pem data.txt ubuntuec2-xx-xxx-xx-xx1.compute-x.…

用c++做到将数字转换为中文模式

主要功能就是将数字的123&#xff0c;个位&#xff0c;十位&#xff0c;百位知道亿都用中文给显示出来 具体代码如下&#xff1a; #include <iostream> #include <string> using namespace std; // 定义数字对应的中文字符 const string zw[] { "零"…

面向对象编程:在Python中的面向对象编程奥秘

面向对象编程在Python中的奥秘 在编程的世界里&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种非常重要的编程范式。它改变了我们思考问题和设计代码的方式。Python作为一种支持面向对象的语言&#xff0c;为我们提供…

langchain 使用本地通义千问

langchian 使用已经下载到本地的模型&#xff0c;我们使用通义千问 显存&#xff1a;24G 模型&#xff1a;qwen1.5-7B-Chat&#xff0c;qwen-7B-Chat 先使用 qwen-7B-Chat&#xff0c;会报错用不了&#xff1a; 看了下是不支持这中模型&#xff0c;但看列表中有一个 Qwen 字样…

谷歌(Google)技术面试——在线评估问题(二)

谷歌&#xff08;Google&#xff09;面试过程的第一步&#xff0c;你可能会收到一个在线评估链接。 评估有效期为 7 天&#xff0c;包含两个编码问题&#xff0c;需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处&#xff0c;还提供了有关 Google 面试不…

【Linux】初识Linux,虚拟机安装Linux系统,配置网卡

前言 VMware软件&#xff1a;首先&#xff0c;确保您已经下载了VMware Workstation软件并安装在电脑上。VMware Workstation是一款功能强大的虚拟化软件&#xff0c;它允许在单一物理机上运行多个操作系统。 Linux镜像文件&#xff1a;需要准备一个Linux操作系统的镜像文件。…

win64平台用cmake编译lvgl

一、编译步骤 1&#xff0c;配置 mkdir build cd build 配置release&#xff0c;动态库 cmake .. -G"Visual Studio 17 2022" -DCMAKE_BUILD_TYPERelease -DCMAKE_INSTALL_PREFIXinstall -DBUILD_SHARED_LIBSON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLSON -DLV_CO…

python使用uiautomator2操作雷电模拟器9找图

接上篇文章python使用uiautomator2操作雷电模拟器9并遇到解决adb 连接emulator-5554 unauthorized问题-CSDN博客 搭建好uiautomator2后&#xff0c;主要就是使用了。 本文就利用uiautomator2的截屏、模拟点击和aircv的找图功能&#xff0c;实现对指定寻找的图片的位置的点击。…

java程序生成exe文件启动时,在没有java环境计算机运行

1.idea项目配置工件 2. 开始构建java程序成jar包 3. 生成exe启动程序

【图像分类】MMPretrain训练ImageNet格式自定义数据集

1. 安装环境 1.1. Conda虚拟环境 conda create --name mmpretrain python3.8 -y conda activate mmpretrain 1.2. 安装PyTorch pip install torch1.13.1cu117 torchvision0.14.1cu117 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117 1.3. 安…

结构型模式--3.组合模式【草帽大船团】

1. 好大一棵树 路飞在德雷斯罗萨打败多弗朗明哥之后&#xff0c;一些被路飞解救的海贼团自愿加入路飞麾下&#xff0c;自此组成了草帽大船团&#xff0c;旗下有7为船长&#xff0c;分别是&#xff1a; 俊美海贼团75人 巴托俱乐部56人 八宝水军1000人 艾迪欧海贼团4人 咚塔塔海…

交换机的基本原理与配置_实验案例一:交换机的初始配置

1、实验环境 实验用具包括一台Cisco交换机&#xff0c;一台PC&#xff0c;一根Console 线缆。 2、需求描述 如图5.17所示&#xff0c;实验案例一的配置需求如下。 通过PC连接并配置一台Cisco交换机。在交换机的各个配置模式之间切换。将交换机主机的名称改为BDON 3、推荐步…

滴滴春招内幕揭秘:2024最全Spring JPA面试题大全,含详解与实战示例!百分之九十九的Java后端开发者都在收藏!

在2024年的技术招聘市场中&#xff0c;滴滴出行作为领先的移动出行平台&#xff0c;对后端开发人员的需求依然强劲。随着Spring框架在企业级Java应用开发中的广泛应用&#xff0c;Spring Data JPA作为数据访问层的关键技术&#xff0c;成为了滴滴面试中的重要考察点之一。Sprin…

【滑动窗口】

滑动窗口算法是解决一类特定问题的有效方法&#xff0c;尤其适用于涉及数组/字符串的连续元素问题。这里有一些常见的应用题型&#xff0c;可以用C实现滑动窗口算法来解决&#xff1a; 最小覆盖子串&#xff1a;给定一个字符串S和一个字符串T&#xff0c;在S中找到最小的子串&a…

知网参考文献引用格式转latex中BibTex-Python操作

处理思路 参考 处理步骤&#xff1a; &#xff08;单条处理&#xff1a;&#xff09; 1、选知网NoteExpress格式的2-7行复制信息 2、新建一个文本文件&#xff0c;命名为cite.txt&#xff0c;把知网所复制信息粘贴进来 &#xff08;txt文件保存编码ANSI可行&#xff09; 3、…

SpringBoot登录校验拦截器Interceptor

什么是拦截器 是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。 拦截器是Spring框架中提供的&#xff0c;用来动态拦截控制器方法的执行。 拦截器的作用&#xff1a; 拦截请求&#xff0c;在指定方法调用前后&#xff0c;根据业务需要执行预先设定的代码。 在拦截器…

Double.toString()原理

转变过程 如图&#xff0c;假设将double类型能精确表示的数字落在数轴上&#xff0c;分别是double1、double2、double3。 这个时候&#xff0c;我们有十进制数字a&#xff0c;想要转变成double表示&#xff0c;这个时候得到的是double2&#xff0c;因为double2是距离这个十进制…