План выполнения показывает отсутствующий индекс, но запрос быстрый

8

При просмотре фактического плана выполнения он показывает отсутствующие индексы, даже если запрос занимает менее 1 секунды.

SELECT
    Account.AccountID,
    Account.Name
FROM
    account      
    LEFT OUTER JOIN accountfeaturesetting afs 
ON afs.accountid = account.accountid   
and afs.featureid = 'Schedules'
 and  
afs.settingid = 'EditReasons'           
WHERE
    ISNULL(afs.Value, '0') = '0'  
    AND EXISTS 
(SELECT 1 FROM program WHERE program.AccountID = account.AccountID
 AND program.Active = 1 
AND (program.ScheduleEditReasonFlags <> 0 
OR program.ScheduleEditReasonFields <> 0))
    AND account.IsMaster = 0
    AND account.BeginDate IS NOT NULL

План выполнения показывает:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])

Нужно ли создавать индекс, даже если запрос занимает всего 1 секунду? На каком основании должен быть создан индекс?

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

СОМ
источник
1
Достаточно ли быстро одной секунды?
Эрик Дарлинг
Она занимает менее 1 секунда
Somu
4
Хорошо ... это достаточно быстро?
Эрик Дарлинг
Я думаю , что так быстро , как его счета таблицы имеет 900 rows.and счет featuresetting имеет 21385 строк
Somu
1
Я бы сказал, добавьте больше строк, например, в 100 раз больше, чем у вас есть в тестовой базе данных, и опубликуйте фактический план выполнения. затем опубликуйте его снова после добавления этого индекса, и вы увидите и узнаете, почему другие рекомендуют или не применяют этот индекс.
Magier

Ответы:

15

Вам не нужно добавлять индекс прямо сейчас. Все сообщения об отсутствующем индексе означают, что это может быть полезно. Это может быть не честно, или может быть индекс, который помогает еще больше.

Что касается того, когда вам нужно добавить новый индекс? Хорошо, скажем, у вас есть 100 строк в таблице счетов, но она еще не используется. Через пару месяцев у вас будет до 10000 строк, и теперь запрос занимает полчаса или больше. В этот момент вы можете рассмотреть возможность добавления индекса. И когда я говорю «подумай», я имею в виду проверить его в тестовой среде и посмотреть, действительно ли он улучшит ситуацию.

Другие соображения включают в себя:

  • Сколько индексов у меня уже есть в этой таблице? Если у вас есть 10+ индексов, то я был бы более обеспокоен, чем если бы вы сказали 2.
  • Насколько важен этот запрос? Вы говорите, что запускаете его каждую ночь. На 1 секунду это нормально (при условии, что вы запускаете его только один раз). Если, с другой стороны, это часть процесса, и каждый вечер его запускают тысячи раз, это может быть более серьезной проблемой. Если доходит до того, что требуется достаточно много времени, чтобы вызвать проблемы (вызывая проблемы с другим процессом или время, когда пользователи находятся в системе и т. Д.), Тогда вам нужно посмотреть на производительность и добавить индексы.
Кеннет Фишер
источник
Также стоит спросить, сколько учетных записей вы ожидаете иметь. Если вы принимаете заказы на лайнеры, у вас может не быть такой огромной клиентской базы, но если это сайт в социальных сетях, ваша главная цель - как можно быстрее набрать это число в миллионы. Еще одна вещь - в некоторых случаях я бы склонялся к созданию индекса сейчас, чтобы мне не пришлось искать то, что замедляет работу приложения год спустя, когда по какой-то причине количество учетных записей уменьшается.
MS