Составные таблицы, первичные ключи, внешний ключ и индексирование в SQL Server - PullRequest
1 голос
/ 03 марта 2012

У меня есть составная таблица TeacherClass с двумя столбцами, TeacherID и ClassID. Первичный ключ - это и TeacherID, и ClassID. Несмотря на то, что они также считаются внешними ключами, я должен добавить индекс для каждого столбца в отдельности, даже если они имеют один индекс на обоих из них, объединенный с первичным ключом?

Ответы [ 2 ]

1 голос
/ 03 марта 2012

Если у вас есть первичный ключ на (TeacherID, ClassID), у вас уже есть индекс для этих двух.

Однако запрос, который использует только ClassID в качестве своего параметра, не сможет воспользоваться этим индексом - этот индекс работает только для (TeacherID) или (TeacherID, ClassID).

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

Индекс только по TeacherID, однако, совершенно лишний.

1 голос
/ 03 марта 2012

Если они оба являются частью PK, то, скорее всего, уже находятся в кластеризованном индексе, но индекс будет иметь, скажем, (TeacherID, ClassID), а не наоборот (ClassID, TeacherID).Это означает, что таблица будет работать быстро при выполнении чего-то вроде:

SELECT * FROM TeacherClass WHERE TeacherID = 9

, но медленно при запуске

SELECT * FROM TeacherClass WHERE ClassID = 9

Если вы планируете запускать аналогичные операторы select, добавьте новый индекс, включая ClassIDи TeacherID, в этом порядке.Тогда вам не понадобятся никакие отдельные индексы (имея индекс, который включает в себя Col1 и Col2, делает индекс, который включает в себя только Col1, избыточным).

...