쿼리 유형 및 인덱스

열에 인덱스를 만들지 여부를 결정할 때는 먼저 해당 열이 쿼리에서 어떻게 사용되는지 고려해야 합니다. 다음 표에서는 인덱스를 만들면 유용한 쿼리 유형에 대해 설명합니다.

[!참고]

이 표의 예는 AdventureWorks2008R2 예제 데이터베이스를 기반으로 합니다. SQL Server Management Studio에서 이 예를 실행하는 경우 실제 실행 계획을 표시하여 쿼리 최적화 프로그램이 선택한 인덱스를 볼 수 있습니다. 자세한 내용은 방법: 실제 실행 계획 표시를 참조하십시오.

다음 중 하나의 열 조건자가 있는 쿼리

쿼리 설명 및 예

고려할 인덱스

특정 값에 정확히 일치

쿼리에서 WHERE 절을 사용하여 특정 값으로 열 항목을 지정하는 정확히 일치하는 항목을 검색합니다. 예를 들면 다음과 같습니다.

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID = 228; 

BusinessEntityID 열의 비클러스터형 또는 클러스터형 인덱스

IN (x,y,z) 목록의 값에 정확히 일치

지정한 값 목록의 값에 정확히 일치하는 항목을 검색합니다. 예를 들면 다음과 같습니다.

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID IN (288, 30, 15);

BusinessEntityID 열의 비클러스터형 또는 클러스터형 인덱스

값 범위

쿼리에서 두 값 사이의 값을 갖는 항목을 지정하는 값 범위를 검색합니다. 예를 들면 다음과 같습니다.

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID BETWEEN 1 and 5;

또는

WHERE ProductModelID >= 1 AND ProductModelID <= 5

ProductModelID 열의 비클러스터형 또는 클러스터형 인덱스

테이블 간 조인

조인 조건자를 기준으로 테이블에서 다른 테이블의 행과 일치하는 행을 검색합니다. 예를 들면 다음과 같습니다.

SELECT a.ProductAssemblyID, b.Name, a.PerAssemblyQty
FROM Production.BillOfMaterials AS a
JOIN Production.Product AS b 
ON a.ProductAssemblyID = b.ProductID
WHERE b.ProductID = 900;

ProductID 및 ProductAssemblyID 열의 비클러스터형 또는 클러스터형 인덱스

LIKE 비교

'abc%'와 같은 특정 문자열로 시작하는 일치하는 행을 검색합니다. 예를 들면 다음과 같습니다.

SELECT CountryRegionCode, Name 
FROM Person.CountryRegion 
WHERE Name LIKE N'D%'

Name 열의 비클러스터형 또는 클러스터형 인덱스

정렬 또는 집계

암시적 또는 명시적 정렬 순서 또는 집계(GROUP BY)를 지정해야 합니다. 예를 들면 다음과 같습니다.

SELECT a.WorkOrderID, b.ProductID, a.OrderQty, a.DueDate 
FROM Production.WorkOrder AS a
JOIN Production.WorkOrderRouting AS b 
ON a.WorkOrderID = b.WorkOrderID
ORDER BY a.WorkOrderID;

정렬 또는 집계 열의 비클러스터형 또는 클러스터형 인덱스

열을 정렬할 때는 열의 ASC 또는 DESC 순서를 지정하십시오.

PRIMARY KEY 또는 UNIQUE 제약 조건

삽입 및 업데이트 작업에서 새 인덱스 키 값과 중복되는 값을 검색하여 PRIMARY KEY 및 UNIQUE 제약 조건을 적용합니다. 예를 들면 다음과 같습니다.

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
VALUES ('OZ1', 'OuncesTest', GetDate());

제약 조건에 정의된 열의 비클러스터형 또는 클러스터형 인덱스

PRIMARY KEY/FOREIGN KEY 관계의 UPDATE 또는 DELETE 작업

열이 CASCADE 옵션을 사용 또는 사용하지 않고 PRIMARY KEY/FOREIGN KEY 관계에 참여하는 업데이트 또는 삭제 작업에서 행을 검색합니다.

외래 키 열의 비클러스터형 또는 클러스터형 인덱스

선택 목록에는 있지만 조건자에는 없는 열

선택 목록에는 있지만 검색 및 조회에는 사용되지 않는 하나 이상의 열을 포함합니다. 예를 들면 다음과 같습니다.

SELECT Title, Revision, FileName
FROM Production.Document
WHERE Title LIKE N'%Maintenance%' AND Revision >= 0';

INCLUDE 절에 FileName이 지정된 비클러스터형 인덱스