2013-03-25 3 views
2

기본 키가 아닌 컬럼 (A는 B, C, D)에있는 (A, B, C, D)부분 키 조회

를 포함하는 조회 것인가에 대한 인덱스가있는 테이블이 존재한다고 가정 (A, B, C, D)의 하위 집합은 색인을 사용합니까? 설명 된 부분 키 조회에는 어떤 종류의 특이성이 있습니까?

저는 SQL Server, Sqlite, Firebird에서 이것이 어떻게 작동하는지에 특히 관심이 있습니다.

답변

3

예, 검색 키 인덱스 필드와 동일한 순서로되어있는 경우.

그렇지 않으면 아니오. 도서관에 갈 수있는 지침이 주어 졌다고 가정하면 세 번째 페이지 인 3 장인 "The Gatsby"를 살펴보십시오. 그것은 다중 필드 색인을 사용하는 것과 같습니다.

이제 책 제목이없는 3 장 3 페이지를 얻으라고합니다. 모든 책을 살펴 봐야 할 것입니다.

+0

그래서이 시나리오를 지원하려면 각각 A, B, C, D에서 4 개의 개별 인덱스를 선언해야합니다. 예 : " '%'로 시작하는 3 장의 모든 책 가져 오기 –

+1

예. 단점은 삽입과 업데이트가 더 비쌉니다. –

4

인덱스의 초기 하위 집합을 사용하는 쿼리는 인덱스를 사용해야합니다.

그래서 (A), (A)와 (B) 및 (A)와 (B)와 (C)의 동등 조인은 색인을 사용해야합니다.

사실, 당신은뿐만 아니라 불평등을 추가 할 수 있으므로, 인덱스가 지원해야 다음의 모든 :

  • xA를 = 나중에
  • XA를 = YA와의 xB> yB의
  • XA를 = YA 및 = xB를 yB의
  • = xA를 YA 및 YB가 = xB가 및 XC> yC 명명
  • YA = xA를과 yB의 및의 xB = XC = yC 명명
  • YA = xA를과 yB의 및의 xB = XC = yC 명명 및 X. D> y.D
  • x.A = y.A 및 x.B = y.B 및 x.C = y.C 및 x.D = y.D
+0

약 x.C = y.C? 그 결과 전체 테이블 스캔이 가능합니까? –

+1

그러면 테이블 스캔이 아닌 인덱스 스캔이 발생합니다. 그것은 테이블 스캔보다 빠르지 만 위에 열거 된 Gordon 시나리오처럼 인덱스 탐색만큼 빠르지는 않습니다. 더 많은 정보가 있습니다 [여기] (http://stackoverflow.com/questions/1136524/sql-server-plans-difference-between-index-scan-index-seek). –