2010-03-08 4 views
0

Я пытаюсь настроить некоторые хранимые процедуры и задать вопрос об индексах. Я использовал советника по настройке, и они рекомендовали два индекса, как для одной таблицы. Проблема заключается в одном индексе для одного столбца, а другой для нескольких столбцов, из которых он содержит один и тот же столбец из первого. Мой вопрос - почему и в чем разница?SQL Overlapping и многоколоночные индексы

CREATE NONCLUSTERED INDEX [_dta_index_Table1_5_2079723603__K23_K17_K13_K12_K2_K10_K22_K14_K19_K20_K9_K11_5_6_7_15_18] 
ON [dbo].[Table1] ( 
    [EfctvEndDate] ASC,  
    [StuLangCodeKey] ASC, 
    [StuBirCntryCodeKey] ASC, 
    [StuBirStOrProvncCodeKey] ASC, 
    [StuKey] ASC, 
    [GndrCodeKey] ASC, 
    [EfctvStartDate] ASC, 
    [StuHspncEnctyIndctr] ASC, 
    [StuEnctyMsngIndctr] ASC, 
    [StuRaceMsngIndctr] ASC, 
    [StuBirDate] ASC, 
    [StuBirCityName] ASC 
) INCLUDE (
    [StuFstNameLgl], 
    [StuLastOrSrnmLgl], 
    [StuMdlNameLgl], 
    [StuIneligSnorImgrntIndctr], 
    [StuExpctdGrdtngClYear] 
) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) 
ON [PRIMARY] go 

CREATE NONCLUSTERED INDEX [_dta_index_Table1_5_2079723603__K23] 
ON [dbo].[Table1] (
    [EfctvEndDate] ASC 
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF)  
ON [PRIMARY] 
+0

Не точный дубликат, но вы можете прочитать это, если у вас его нет: http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column-indexes –

+0

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

ответ

2

Если, как и в вашем случае выше, единственный столбец - это первый столбец, определенный в индексе с несколькими столбцами: он не всегда корректен , Или рабочая нагрузка запроса со временем изменилась. Если индекс нескольких столбцов полезен и используется, вы можете удалить индекс столбца. НО, профиль и проверьте отчет об использовании индекса.

Если нет, то оно применимо к различным запросам. Одна вещь, которую я заметил, DTA нравится делать, это создать индекс, который по существу является копией всей таблицы, особенно в ситуациях, когда рабочая нагрузка запроса испускается ORM.

Как и в этом случае, и все остальные, важно, чтобы вы определяли эффективность любых индексов в отношении вашей «нормальной» рабочей нагрузки запроса.

2

«автономный» индекс EfctvEndDate, в то же время функционально доступны в другой индекс, будет намного меньше, и, следовательно, более эффективным (в отношении количества чтений требуется, чтобы его способность кэшировать , остаются в кеше и т. д.).

Это, конечно, сильно зависит от шаблонов использования и т. Д., Но да, в целом, очень правдоподобно, что наличие нескольких, по-видимому, избыточных индексов является чувствительным подходом.

Недостатки индекса «дублирование» в основном (и, возможно, в порядке больше, меньшему воздействию):

  • вставки/обновления/DELETE запросов на базовой таблице, влечет за собой накладные расходы на производительность, чтобы поддерживать дополнительные индекс (ы).
  • конкурс на использование кеша
  • [очень немного] больше времени для составления планов запросов.
  • Накладные расходы на хранение (обычно это не проблема, но увеличивает время резервного копирования, однако ...).

Необходимо поэтому оценить, улучшена ли производительность с запросами SELECT, которые потенциально могут извлечь выгоду из дополнительного индекса (ов), компенсирующего недостаток, указанный выше. Настройка производительности базы данных, как правило, осуществляется в каждом конкретном случае ...

+0

@ Митч. Я смягчил это утверждение ;-). По-моему, по-моему, «избыточные» индексы весьма востребованы «во многих случаях». – mjv

+0

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

+0

@Mitch Wheat: все хорошие моменты! Я думаю, мы понимаем обе стороны аргумента и, вероятно, предоставим аналогичные рекомендации по конкретному делу.Однако в этом случае забота о производительности резервного копирования заставила меня улыбнуться: вряд ли можно обвинить одинокий индекс «EfctvEndDate» для проблем с раздутыми резервными копиями, учитывая «расширенный» индекс покрытия (BTW, более пристально рассматривая его с довольно сомнительный набор ключевых и ключевых последовательностей, я ответил прямо на ОП, но, возможно, также предложил ему оценить эффективную полезность этого широкого индекса). – mjv

Смежные вопросы