Как индексировать результат JOIN двух или более таблиц, чтобы повысить производительность на сервере SQL? - PullRequest
1 голос
/ 22 февраля 2011

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

Теперь у меня есть требование, по которому следует индексировать, чтобы повысить производительность. Я читал о индексации внешнего ключа , чтобы улучшить производительность результата JOIN .

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

Как эффективно реализовать индексацию, если моя структура таблицы SQL выглядит следующим образом, и у меня есть JOIN-запрос с предложением WHERE с использованием t1_col3

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)

1 Ответ

1 голос
/ 22 февраля 2011

Без плана запроса, фактического запроса или сведений о том, как распределяются ваши данные, невозможно дать конкретную рекомендацию, но вот несколько вещей, о которых следует помнить.

  1. Создание внешнего ключа не приводит к автоматическому созданию индекса для столбца внешнего ключа.Это просто ограничение.
  2. Поскольку объединения между таблицами часто включают столбцы внешнего ключа, а SQL Server необходимо регулярно проверять столбец внешнего ключа, чтобы применить ограничение, обычно целесообразно размещатьиндекс для столбца внешнего ключа.
  3. С тем небольшим, что вы описали, у вашего запроса есть критерий для столбца t1_col3 - он будет использовать этот столбец для фильтрации значений в таблице1;это может (это действительно зависит от плана запроса, и это зависит от распределения данных в таблицах и других критериев и операций в запросе), было бы хорошей идеей поместить индекс в t1_col3.

Что касается третьего пункта, полезность индекса будет сильно зависеть от конкретного итератора / оператора, который механизм запросов использует для реализации объединения между двумя таблицами, и какая таблица управляет объединением.

Любая дополнительная информация, которую вы можете предоставить - запрос, план запроса, количество строк - поможет нам дать более конкретный ответ.

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