SQL Server: поиск и удаление указателей индекса в хранимых процедурах - PullRequest
0 голосов
/ 03 сентября 2018

Поскольку мы живем в мире «сначала доставка» , теперь мы обнаружили себя с базами данных, зараженными тоннами индексных подсказок .

Я написал запрос, который может помочь мне найти все 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 символов до и 30 символов после the WITH (INDEX=.

enter image description here

Как выбрать только эту часть строки?

В основном в этом столбце я просто хотел бы увидеть:

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

, который является частью запроса, который меня интересует. Я хочу сразу увидеть, насколько болезненным является этот указатель.

1 Ответ

0 голосов
/ 03 сентября 2018

Пример демо,

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...