제품 및 제품 범주에 2 개의 테이블이 있다고 가정합니다. 두 테이블 모두 CategoryId에 관계가 있습니다. 그리고 이것은 쿼리입니다.
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
실행 계획을 만들 때 Product Categories 테이블은 예상대로 클러스터 인덱스 검색을 수행합니다. 그러나 테이블 제품의 경우 클러스터 인덱스 스캔을 수행하므로 의심의 여지가 있습니다. FK가 쿼리 성능 향상에 도움이되지 않는 이유는 무엇입니까?
따라서 Products.CategoryId에 인덱스를 만들어야합니다. 실행 계획을 다시 만들면 두 테이블 모두 인덱스 검색을 수행합니다. 그리고 예상되는 서브 트리 비용이 많이 줄어 듭니다.
내 질문은 :
FK 외에도 관계 제한에 도움이되지만 다른 유용성이 있습니까? 쿼리 성능이 향상됩니까?
모든 테이블의 모든 FK 열 (예 : Products.CategoryId)에 인덱스를 만들어야합니까?