두 개의 TeacherID 및 ClassID 열이있는 TeacherClass라는 복합 테이블이 있습니다. 기본 키는 TeacherID 및 ClassID입니다. 이것도 외래 키로 간주되지만, 기본 키와 결합 된 둘 모두에 하나씩 있더라도 각 열에 별도로 인덱스를 추가해야합니까?SQL Server의 복합 테이블, 기본 키, 외래 키 및 인덱싱
0
A
답변
1
둘 다 PK의 일부인 경우 클러스터 된 인덱스에 이미있을 가능성이 높지만 색인의 경우는 (TeacherID, ClassID)
(ClassID, TeacherID)이 아닌 (TeacherID, ClassID)
이됩니다. 비슷한 SELECT 문을 실행에 계획하는 경우에, ClassID가와 TeacherID을 포함하여 새로운 인덱스를 추가
SELECT * FROM TeacherClass WHERE ClassID = 9
를 실행하는 경우에,
SELECT * FROM TeacherClass WHERE TeacherID = 9
하지만 느린 :이 같은 뭔가를 실행할 때 테이블이 빠르게 될 것을 의미합니다 그 순서. 그러면 별도의 인덱스가 필요하지 않습니다 (Col1과 Col2를 포함하는 인덱스를 사용하면 Col1 만 중복되는 인덱스가됩니다).
1
(TeacherID, ClassID)
에 기본 키가있는 경우 이미 해당 키에 대한 색인이 있습니다.
그러나 매개 변수로 ClassID
만 사용하는 쿼리는 해당 인덱스를 사용할 수 없으며 해당 인덱스는 (TeacherID)
또는 (TeacherID, ClassID)
에서만 작동합니다.
그렇습니다. ClassID
열이 다른 테이블의 외래 키로 사용되는 경우, 나는 확실히 (ClassID)
에 색인을 붙여야한다고 주장 할 것입니다.
다만 TeacherID
에 대한 색인은 완전히 불필요합니다.