과 같습니다
CREATE TABLE Employee(EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
HireDate DATETIME,
Salary DECIMAL)
당신은 직원 ID의 기본 클러스터 키가, 그리고 아마도 것 이름으로 직원을 찾을 수 있도록 (성, 이름)의 클러스터되지 않은 키. 이제 "조 머피"를 발견하고 자신의 고용 날짜와 급여를 검색해야하는 경우
CREATE INDEX NameIndex ON Employee(LastName ASC, FirstName ASC)
, 무슨 일 인덱스 (선한) 이름 기반 클러스터되지 않은 키를 추구하지만, 다음 순서로 고용 날짜와 월급을 가져 오려면 SQL Server는 Joe Murphy에 대한 레코드를 얻기 위해 실제 테이블 데이터에 대한 소위 북마크 조회를 수행해야합니다. 이것은 하나 또는 여러 물리적 디스크 액세스 (성능면에서 좋지 않음)가 발생할 가능성이 높습니다.
그러나 :
CREATE INDEX NameIndex ON Employee(LastName ASC, FirstName ASC)
INCLUDE (HireDate, Salary)
다음 SQL 서버는 클러스터되지 않은 이름으로 조 머피를 보았다 된 후에는 수행됩니다 : 당신의 이름 기반 클러스터되지 않은 인덱스는 지정하는 경우 "(HIREDATE, 급여를) 포함" index -> 쿼리를 만족시키는 모든 필드가 클러스터되지 않은 인덱스에 있으므로 디스크 집약적 인 책갈피 조회를 수행 할 필요가 없으므로 쿼리가 훨씬 빨라질 수 있습니다.
INCLUDE 열의 단점은 리프 수준 노드에 포함 된 열이 있으므로 클러스터되지 않은 인덱스가 디스크 공간을 늘릴 필요가 있다는 것입니다. 속도와 크기 사이의 상반 관계입니다 (평소와 같이).
마크
이 매우 – Andomar