Два индекса для одного столбца и изменение порядка - PullRequest
0 голосов
/ 29 января 2019

У меня есть большая таблица в Microsoft SQL Server 2008. Она имеет два индекса.Один индекс со столбцом A в порядке убывания, а другой индекс со столбцом A, в порядке возрастания с некоторыми другими столбцами.

Мое приложение выполняет следующие действия:

  1. Выберите для записи.
  2. Если записи нет, вставьте
  3. Если найдете, обновите записи

Обратите внимание, что в этой таблице миллионы записей.

Вопрос:эти индексы влияют на производительность выбора / вставки / обновления?

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Спасибо за все ответы.Я исследовал SQL Server Profiler и SQL Tuning Advisor для SQL Server и запустил их, чтобы получить рекомендуемые индексы.Он рекомендовал один индекс с опциями включения.Я использовал индекс, и производительность была улучшена .

0 голосов
/ 29 января 2019

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

Представьте, что вы 2 словаря английского языка, один сортируетслова от A до Z и другие от Z до A. Усилие, которое вам потребуется для поиска конкретного слова, будет примерно одинаковым в обоих случаях.

Другой случай был бы, если бы у вас было 2 спискаданные людей: один упорядочен по имени, затем по фамилии, а другой по фамилии, а затем по имени.Если вам нужно искать «Джон Доу», тот, который упорядочен по фамилии, будет практически бесполезным по сравнению с другим.

Эти примеры представляют собой очень упрощенные представления индексов наSQL Server.Индексы хранят свои данные в структуре, которая называется B-деревом, но для целей поиска эти примеры помогают понять, когда индекс будет полезен или нет.

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

PD: Что касается используемого второго индекса, это значительнозависит от запроса, который вы используете для доступа к этой конкретной таблице, его объединений и предложений where.Вы можете использовать «Показать примерный план выполнения», выделив запрос в SSMS, чтобы увидеть план доступа механизма к каждому объекту для выполнения операции.Если индекс используется, вы увидите его там.

...