У меня есть составная таблица под названием TeacherClass с двумя столбцами: TeacherID и ClassID. Первичный ключ - это как TeacherID, так и ClassID. Несмотря на то, что они также считаются внешними ключами, следует ли мне добавлять индекс к каждому столбцу отдельно, даже если у них есть один на обоих из них, объединенный с первичным ключом?
Составные таблицы, первичные ключи, внешний ключ и индексирование в SQL Server
Ответы (2)
Если они оба являются частью PK, то, скорее всего, они уже находятся в кластеризованном индексе, но индекс будет иметь, скажем, (TeacherID, ClassID)
, а не наоборот (ClassID, TeacherID). Это означает, что таблица будет быстрой при выполнении чего-то вроде:
SELECT * FROM TeacherClass WHERE TeacherID = 9
Но медленно при беге
SELECT * FROM TeacherClass WHERE ClassID = 9
Если вы планируете запускать аналогичные операторы выбора, добавьте новый индекс, включая ClassID и TeacherID, в указанном порядке. Тогда вам не понадобятся отдельные индексы (наличие индекса, включающего Col1 и Col2, делает индекс, включающий только Col1, избыточным).
Если у вас есть первичный ключ на (TeacherID, ClassID)
, у вас уже есть индекс для этих двух.
Однако запрос, который использует только ClassID
в качестве параметра, не сможет воспользоваться этим индексом - этот индекс работает только для (TeacherID)
или (TeacherID, ClassID)
.
Итак, да - если столбец ClassID
используется в качестве внешнего ключа в других таблицах, я определенно утверждаю, что вам следует разместить индекс только для (ClassID)
.
Однако указатель только на TeacherID
совершенно излишен.