Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Индекс нужен, индекс есть, но система его не использует  [new]
Диам
Member

Откуда:
Сообщений: 1422
Добрый день.
Люди, объясните, пожалуйста. Есть вот такой скрипт, показывающий "Отсутствующие индексы, вызывающие издержки" (взят с SQL.ru)
+
SELECT TOP 100
[Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0),
avg_user_impact,
TableName = statement,
[EqualityUsage] = equality_columns,
[InequalityUsage] = inequality_columns,
[Include Columns] = included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
WHERE database_id = DB_ID() --AND statement='[secCZ].[dbo].[RassilkaLog1]'
ORDER BY [Total Cost] DESC;


Согласно этому скрипту мне не хватает индекса на одной табличке, и стоимость "Total Cost" отсутствие этого индекса сильно больше (на порядок) остальных.

Необходимый мне индекс, согласно этому запросу, я создал уже очень давно, но, видимо, этот индекс все равно не используется.
Как определить какому именно запросу нужен этот индекс, и почему если он нужен и он есть, то не используется?
27 мар 14, 17:32    [15796358]     Ответить | Цитировать Сообщить модератору
 Re: Индекс нужен, индекс есть, но система его не использует  [new]
Диам
Member

Откуда:
Сообщений: 1422
дополнение - таблица эта уже имеет АЖ 26 индексов для каждого поля, которое участвует во внешних связях... вот.
27 мар 14, 17:37    [15796398]     Ответить | Цитировать Сообщить модератору
 Re: Индекс нужен, индекс есть, но система его не использует  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Диам
как определить какому именно запросу нужен этот индекс
профайлер с фильтром по имени табл
Диам
почему если он есть, то не используется
анализ текстов запросов и их планов
27 мар 14, 17:45    [15796454]     Ответить | Цитировать Сообщить модератору
 Re: Индекс нужен, индекс есть, но система его не использует  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
И что, запроса не будет?
27 мар 14, 17:48    [15796480]     Ответить | Цитировать Сообщить модератору
 Re: Индекс нужен, индекс есть, но система его не использует  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Индекс не покрывает запрос, поэтому не используется. Забыли/не сочли нужным поля добавить.
28 мар 14, 10:34    [15799114]     Ответить | Цитировать Сообщить модератору
 Re: Индекс нужен, индекс есть, но система его не использует  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Диам
Согласно этому скрипту мне не хватает индекса на одной табличке, и стоимость "Total Cost" отсутствие этого индекса сильно больше (на порядок) остальных.

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

Диам
Как определить какому именно запросу нужен этот индекс, и почему если он нужен и он есть, то не используется?
Это весьма нетривиальная задача. Можно распарсить все планы где есть missing indexes, используя например вот такой скрипт, а потом сделать поиск по equality_columns, inequality_columns и include_columns. Но парсинг планов во-первых весьма тяжелая операция, которая может занять много времени, а во-вторых того плана которому нужен индекс может уже не быть в кэше.

Диам
дополнение - таблица эта уже имеет АЖ 26 индексов для каждого поля, которое участвует во внешних связях... вот.
Можно хоть вообще на каждое поле индекс повесить, дальше то что?
30 мар 14, 23:26    [15808701]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить