Определите, использовался ли индекс в качестве подсказки

В SQL Server есть возможность использовать подсказки запросов. например

SELECT c.ContactID
FROM Person.Contact c
WITH (INDEX(AK_Contact_rowguid))

Я нахожусь в процессе избавления от неиспользуемых индексов, и мне было интересно, как я могу определить, использовался ли индекс в качестве подсказки запроса. Есть ли у кого-нибудь предложения о том, как я могу это сделать?

Привет, Джо


person Joe Bloggs    schedule 26.05.2010    source источник
comment
Вы спрашиваете, использовался ли индекс когда-либо в подсказке (включая специальные операторы SQL) или только в представлении/процедуре?   -  person JohnFx    schedule 27.05.2010
comment
Я хочу знать, использовался ли индекс в представлении/процессе. Меня беспокоит то, что если удалить индекс, который используется в качестве подсказки в представлении/процедуре, представление/процедура завершится ошибкой при вызове приложением БД, что в конечном итоге означает, что конечный пользователь получит непредвиденную ошибку.   -  person Joe Bloggs    schedule 27.05.2010


Ответы (2)


Вы можете запускать профилировщик только для клиентского SQL или искать sys.sql_modules в противном случае.

Чтобы найти неиспользуемые индексы, вы обычно используете что-то основанное на dmvs< /а>. Это покажет вам, какие индексы используются и должны быть сохранены.

person gbn    schedule 27.05.2010

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

Я не думаю, что подсказки попадают в sys.dependencies для процедур и функций, но даже если бы они это сделали, у вас был бы какой-то специальный SQL, с которым можно было бы иметь дело, поэтому я бы использовал маршрут текстового поиска. .

person Dave Markle    schedule 26.05.2010
comment
Как мне написать сценарий всей БД? В SSMS есть возможность использовать сценарий БД, но это создает сценарий только для БД, а не для объектов БД. - person Joe Bloggs; 27.05.2010
comment
Я приостановил этот проект, но для всех, кто заинтересован, вот ссылка для написания сценариев баз данных SQL Server 2008. kodyaz.com/articles/ Я не пробовал, но похоже, что это сработает. - person Joe Bloggs; 27.05.2010