2010-05-26 3 views
2

В SQL Server существует возможность использовать подсказки запросов. напримерОпределите, был ли указатель использован в качестве подсказки

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

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

Cheers, Джо

+0

Вы спрашиваете, использовался ли индекс в подсказке (включая специальные SQL-выражения) или просто, если он используется в представлении/proc? – JohnFx

+0

Я хочу знать, был ли индекс использован в представлении/proc. Меня беспокоит, что если удалить индекс, который используется как подсказка в представлении/proc, представление/proc не будет выполнено при вызове приложением DB, что в конечном итоге означает, что конечный пользователь получит некоторую неожиданную ошибку. –

ответ

0

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

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

+0

Как я буду писать скрипты всей БД? В SSMS есть опция для сценария DB, но это создает только скрипт для БД, а не объекты БД. –

+0

Я считаю, что это «Объекты скриптов ...» или «Сценарий всех объектов ...» Я забыл ... –

+0

Я приостановил этот проект, но для всех, кто заинтересован здесь, является ссылкой на скрипты SQL Server 2008 DB. http://www.kodyaz.com/articles/sql-server-script-database-by-sql-2008-script-wizard.aspx Я не пробовал, но похоже, что это сделало бы работа. –

1

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

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