Правильно ли использовать индекс, который включает INCLUDE всех столбцов? - PullRequest
0 голосов
/ 08 декабря 2018

При отладке SQL-запроса SQL Server Dev Studio предложила мне создать индекс, например:

CREATE INDEX IX_MY_INDEX ON T_EVENT (F_ORIGINAL_ID, F_EVENT_SEQUENCE_NO) 
     INCLUDE (F_USER_ID,  F_REVISION_NO, ... <about 30-40 columns>)

Так, в INCLUDE он предложил иметь огромное количество столбцов.

Хотя я знаю, что использование всех столбцов в главном предложении индекса является плохим дизайном, каковы недостатки использования всех полей в INCLUDE?Или вполне нормально (с точки зрения производительности и оптимизации) иметь такой индекс со многими столбцами после INCLUDE?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

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

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

Есть недостатки:

  • Вставки, обновления и удаления выполняются медленнее.Даже обновления неиндексных ключей влияют на индекс.
    • Индекс "такой же большой, как" таблица (на самом деле немного больше, потому что в индексе есть дополнительные издержки).
  • Больший индекс имеет каскадные эффектыс точки зрения поддержки базы данных - например, более длительное резервное копирование / восстановление и более длительная дефрагментация.
0 голосов
/ 08 декабря 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...