Объекты SQL, которые используют индекс - PullRequest
4 голосов
/ 26 июня 2009

Есть ли способ узнать, какие объекты SQL из одной базы данных используют определенный индекс. Но я не хочу видеть план выполнения для каждого объекта, потому что у меня много хранимых процедур и представлений

PS. Это для SQL 2005

Ответы [ 4 ]

2 голосов
/ 26 июня 2009

нет, вы не можете ... но вы можете видеть, используются ли индексы любым запросом

Вот такой запрос, который даст вам эту информацию

SELECT
TableName = OBJECT_NAME(s.[OBJECT_ID]),
IndexName = i.name,
s.last_user_seek,
s.user_seeks,
CASE s.user_seeks WHEN 0 THEN 0
ELSE s.user_seeks*1.0 /(s.user_scans + s.user_seeks) * 100.0 END AS SeekPercentage,
s.last_user_scan,
s.user_scans,
CASE s.user_scans WHEN 0 THEN 0
ELSE s.user_scans*1.0 /(s.user_scans + s.user_seeks) * 100.0 END AS ScanPercentage,
s.last_user_lookup,
s.user_lookups,
s.last_user_update,
s.user_updates,
s.last_system_seek,
s.last_system_scan,
s.last_system_lookup,
s.last_system_update,*
FROM
sys.dm_db_index_usage_stats s
INNER JOIN
sys.indexes i
ON
s.[OBJECT_ID] = i.[OBJECT_ID]
AND s.index_id = i.index_id
WHERE
s.database_id = DB_ID()
AND OBJECTPROPERTY(s.[OBJECT_ID], 'IsMsShipped') = 0
AND OBJECT_NAME(s.[OBJECT_ID]) = 'TestIndex';

немного больше информации здесь Используйте статистику использования индекса sys.dm db dmv, чтобы проверить, используются ли индексы

ваш другой вариант - проанализировать столбец query_plan из запроса ниже

SELECT q.TEXT,cp.usecounts,cp.objtype,p.*,
q.*,
cp.plan_handle
FROM
sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_query_plan(cp.plan_handle) p
cross apply sys.dm_exec_sql_text(cp.plan_handle) AS q
WHERE
cp.cacheobjtype = 'Compiled Plan' 
and q.TEXT  not like '%sys.dm_exec_cached_plans %'
2 голосов
/ 26 июня 2009

Объекты базы данных не используют индекс, запросы делают.

A table или view может иметь индекс, определенный на нем. Вы можете увидеть это в дереве свойств в Management Studio.

Индекс может или не может быть позже использован запросом к этому table или view.

Решение о том, использовать индекс или нет, принимается на этапе разбора запроса.

Просмотр плана выполнения - единственный способ определить, использует ли запрос индекс или нет.

0 голосов
/ 26 июня 2009

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

В дополнение к sys.dm_db_index_usage_stats, который показывает, как фактически используются индексы, SQL Server также отслеживает отсутствующие индексы и предлагает DMV, которые показывают, какие индексы использовались бы запросами, если бы они были подарок. См. http://msdn.microsoft.com/en-us/library/ms345405.aspx (Использование отсутствующей информации индекса для записи операторов CREATE INDEX).

Вам также следует загрузить отчеты панели мониторинга производительности SQL Server 2005 из http://www.microsoft.com/downloads/details.aspx?FamilyId=1d3a4a0d-7e0c-4730-8204-e419218c1efc&displaylang=en, в которых навигация по всей этой информации (используемые индексы, отсутствующие индексы и т. Д.) Является прогулкой по парку.

0 голосов
/ 26 июня 2009

Вы можете запросить таблицу sys.indexes , которая:

Содержит строку для индекса или кучи табличного объекта, такого как таблица, представление или табличная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...