SQL Server는 단일 열만 WHERE 절에있는 경우 화합물 인덱스를 사용합니까?

StackOverflow https://stackoverflow.com/questions/2228192

문제

테이블이 있다고 말합니다.

CREATE TABLE Users (
    Id INT IDENTITY (1, 1),
    FirstName VARCHAR(40),
    LastName VARCHAR(40)
)

쿼리는 일반적으로 켜져 있습니다 이름 또는 , 그러나 또한 이름 그리고 .

비 클러스터 인덱스를 작성하는 경우 이름 그리고 또 다른 , 그런 다음 처음 두 쿼리가 제공됩니다. 분명히 SQL Server는 사용할 것입니다 인덱스 교차 다른 쿼리의 경우.

또는 INDEXEESE (firstName)와 ON (LastName, FirstName)가있는 경우 SQL Server가 쿼리에 대한 두 번째 인덱스를 사용할 수 있습니다. 둘 다 쿼리뿐만 아니라?

SQL Server는 복합 색인 부품이 왼쪽에서 오른쪽으로 또는 오른쪽으로 오른쪽으로 인덱스가 있습니까? 다시 말해, Key를 LastNameFirstName 또는 FirstNamelastName으로 빌드합니까? 아니면 임의로 하나를 자유롭게 선택할 수 있습니까?

도움이 되었습니까?

해결책

SQL Server는 최후의 쿼리뿐만 아니라 쿼리에 인덱스 (LastName, FirstName)를 사용 할 수 있습니까?

예, 데이터베이스는 LastName의 쿼리에 인덱스 (LastName, FirstName)를 사용합니다. 그것은 할 것입니다 ~ 아니다 FirstName에서만 쿼리 에이 색인을 사용하십시오.

복합 지수 부품을 왼쪽에서 오른쪽으로 또는 오른쪽으로 저장합니까?

스토리지는 a에 있습니다 B- 트리. 오른쪽에서 왼쪽에서 왼쪽에서 오른쪽으로 저장되는 것으로 생각하는지 여부는 유용한 시각화 원조 일 뿐이며 실제 데이터 저장과 관련이 없습니다.

다른 팁

예, LastName만으로 쿼리하면 (LastName, FirstName) 색인을 사용해야합니다. 따라서 LastName 단독으로 쿼리 할 때 또는 LastName 및 FirstName을 함께 사용하면 모두 사용됩니다.

일반적인 가이드 라인은 선택성이 가장 큰 컬럼이 화합물 지수에 먼저 나타나도록하는 것입니다. 이는 다음과 같은 선택적 컬럼이 덜 선택된 결과 세트를 가장 이익을 가장 많이 제공합니다.

보내는 실제 쿼리에 따라 두 열의 복합 인덱스가 두 번째 열만 검색하더라도 사용할 수 있습니다. 그러나 인덱스 찾기는 없지만 인덱스 스캔 일 가능성이 높습니다. 이것이 당신에게 "충분하다"라면 특정 환경에 따라 다릅니다. 인덱싱은 과학보다 예술에 더 가깝고 많은 다른 요인들이 테이블을 색인화하는 방법에 대한 결정에 영향을 미칩니다. 테이블에 너무 많은 지수가있는 것이 너무 적은 것만 큼 나쁘기 때문에 항상 상충됩니다. 가장 중요한 쿼리가 잘 덮여 있는지 확인한 다음 추가 색인의 비용이 가치가 있는지 사례별로 결정하십시오.

또한, 아직 언급되지 않았고 최소한 SQL Server 2005에 있습니다. 클러스터되지 않은 인덱스에 대한 포함 조항을 제출하겠습니다. 간과되었지만 인덱싱 전략에 실제로 유용한 추가 기능입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top