SQL Server:查找和删除存储过程中的索引提示

问题描述 投票:0回答:1

当我们生活在一个“交付第一”的世界中时,我们现在发现了我们自己的数据库被大量的索引提示感染。

我写了一个查询,可以帮助我找出数据库中的所有WITH (INDEX=

SELECT 
    DB_NAME() AS DB_NAME,
    name AS Object_Name,
    type_desc AS Object_Type,
    definition
FROM 
    sys.sql_modules 
INNER JOIN 
    sys.objects ON sys.sql_modules.object_id = sys.objects.object_id
WHERE 
    definition LIKE '%(INDEX=%';

但由于definition专栏有时太长而无法阅读,我想从该专栏中选择,比如前30个字符和WITH (INDEX=之后的30个字符。

enter image description here

如何选择字符串的那一部分?

基本上在该专栏中我只想看到:

...INNER JOIN tblSession WITH (INDEX=indRealDateTime) ON ...

这是我感兴趣的查询的一部分。我想一眼就看出索引提示有多痛苦。

sql-server regex stored-procedures database-performance
1个回答
1
投票

演示示例,

declare @i varchar(500)='afgdfgdfgdfg dgfdgdfg dfgdfgdfg dfgdfgdfg cvxfsdfsdfdf erwererwer (index fgfdgdf weqweqweqwe dsadsads sfsfsdfd erewwerwer 6786787 35345dfsdfgsdfsdf sdfdsfsdfdf'

DECLARE @margin INT = 15 --try 15000

SELECT SUBSTRING(@i, charindex('index', @i) - @margin, charindex('index', @i) + @margin)
© www.soinside.com 2019 - 2024. All rights reserved.