В настоящее время я пытаюсь скомпилировать задание, которое показывает нам, кто в организации обращался к конкретной таблице и когда ее последний раз просматривали, чтобы мы могли привести в порядок все неиспользуемые таблицы в базах данных на нашем сервере.
Одним из шагов задания является просмотр сеанса расширенных событий и в текстовом поле, содержащем запрос SQL, я хочу указать, где в запрос включена конкретная таблица.Итак, в моей финальной таблице я хотел бы показать используемые таблицы вместе с запросом, который их использует.
У меня есть таблица поиска всех наших баз данных и таблиц, а также варианты каждой таблицыимя, которое я хочу проверить по полю текста / запроса в сеансе расширенных событий.
Приведенный ниже код берет имя базы данных и имя таблицы (name1) из таблицы DatabaseLookup, а также текстовые данные, имя пользователя и время запуска.приходят из таблицы хранения трасс, в которую были записаны расширенные данные о событиях:
SELECT T1.DBNAME, t1.name1, t4.textdata, T4.LoginName, T4.startTime
FROM maintenance.dbo.Table_Trace_Holding_xe t4
INNER JOIN [Maintenance].[dbo].[DatabaseLookup] t1 on t4.textdata like '%'
+ t1.name1 + '%'
Когда я запускаю этот запрос, у меня возникает проблема в том, что он занимает больше времени, чем хотелось бы,как он ест в ресурсы сервера.Я попытался проиндексировать столбцы, но безрезультатно - используя подстановочный знак на обоих концах моего соединения, я понимаю, что это займет, по крайней мере, некоторое время, поскольку SSMS будет сканировать, а не искать, но мне нужно искать в поле текстовых данных(sql query) для упоминания имени таблицы (name1), ему нужно просмотреть всю таблицу.В таблице хранения содержится 3 тыс. Записей и 7,5 тыс. Записей - их самостоятельная загрузка занимает считанные секунды.
Можно ли как-то уточнить свой запрос или какие-либо шаги, которые я мог бы выполнитьпринять, чтобы помочь улучшить скорость и эффективность этого?Большое спасибо заранее.