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

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

PS. Это для SQL 2005

4 голоса | спросил Roxana 26 J0000006Europe/Moscow 2009, 18:01:45

4 ответа


0

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

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

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

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

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

ответил Quassnoi 26 J0000006Europe/Moscow 2009, 18:08:09
0

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

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

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';

дополнительная информация здесь

другой вариант - проанализировать столбец 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 %'
ответил SQLMenace 26 J0000006Europe/Moscow 2009, 18:11:12
0

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

  

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

ответил akf 26 J0000006Europe/Moscow 2009, 18:10:15
0

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

В дополнение к 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 , который позволяет перемещаться по всей этой информации (используемые индексы, отсутствующие индексы и т. д.) прогулка в парке.

ответил Remus Rusanu 26 J0000006Europe/Moscow 2009, 18:33:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132