Как индексировать результат JOIN двух или более таблиц, чтобы повысить производительность на сервере SQL?

9

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

Теперь у меня есть требование, по которому индексирование должно быть реализовано для повышения производительности. Я читал об индексации внешнего ключа , чтобы улучшить производительность результата 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)
Харун
источник

Ответы:

13

Внешний ключ по умолчанию не имеет индекса. Вы должны создать один.

В этом случае я бы предложил один из них. Это зависит от относительной селективности 2 столбцов

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

ИЛИ

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

INCLUDE сделает покрытие индекса, чтобы избежать поиска ключей / закладок

ГБН
источник
1
Включение было новой функцией в SQL-Server 2005. На всякий случай, если вы все еще используете Sql-сервер 2000.
bernd_k
@bernd_k: только 6 лет и 3 версии назад :-)
gbn