Sys.dm_db_missing_index_details и советник
Я запускаю этот запрос
SELECT * FROM [dbo].[Bets]
WHERE [BetAmount] =1000
и после этого я проверяю
SELECT * FROM sys.dm_db_missing_index_details
результат последнего
тогда я использовал Tuning Advisor
и и получить следующий результат, он советует мне создать следующий индекс-
SET ANSI_PADDING ON
CREATE NONCLUSTERED INDEX [_dta_index_Bets_5_277576027__K4_1_2_3_5_6] ON [dbo].[Bets]
(
[BetAmount] ASC
)
INCLUDE ( [BetID],
[PlayerID],
[GameID],
[BetDate],
[BetResults]) WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
Мой вопрос должен советник и sys.dm
генерировать тот же результат?
1 ответ
Лично я бы взял все, что либо DMV
или Tuning Advisor "советует" щепоткой соли. Индексная настройка - это художественная форма, которую ни один из этих двух инструментов еще не получил. Вам гораздо лучше видеть, какие у вас есть индексы, и добавлять / настраивать их для более широкого диапазона запросов, чем просто добавлять индексы для одного запроса.
Во всяком случае... я отвлекся...
Итак, следующий запрос:
SELECT * FROM [dbo].[Bets]
WHERE [BetAmount] = 1000;
.... дает предложенный индекс:
CREATE NONCLUSTERED INDEX IX_Bets_BetAmount
ON dbo.Bets(BetAmount);
GO
Основываясь на этом одном запросе (и одном этом запросе), SQL Server определил, что любая выгода, которую можно получить, включив в индекс любые столбцы, пренебрежимо мала, поскольку число возвращаемых строк, вероятно, будет небольшим, а поиск ключей в Кластерный индекс почти так же эффективен, как и поиск по индексу.
Статистика существующей таблицы может определить, что запрос на сумму ставки 1000 вернет очень небольшое количество строк.
Тем не менее, вы можете довольно легко выполнить другой запрос, который возвращает больше строк (скажем, количество 10):
SELECT * FROM [dbo].[Bets]
WHERE [BetAmount] = 10;
... SQL Server теперь может видеть преимущества включения дополнительных столбцов в индекс.
CREATE NONCLUSTERED INDEX IX_Bets_BetAmount
ON [dbo].[Bets]([BetAmount] ASC)
INCLUDE ([BetID], [PlayerID], [GameID], [BetDate], [BetResults]);
GO
Разница между DMV и помощником по настройке заключается в том, что помощник по настройке в целом рассматривает активность вашей базы данных, а не одноразовый запрос.