2014-12-29 3 views
1

바라건대 이것은 아주 간단한 질문이어야하지만 어디서나 대답을 찾을 수는 없습니다.오라클 테이블 인덱스 : 1 대 다수의 열

나는 모든 3 개 필드를 사용하는 경우

CONSTRAINT "MYTABLE_PK" PRIMARY KEY ("CUSTOMERID", "STOREID", "COUNTRYID") ENABLE 

은 분명히 그 인덱스로 작동 다음과 같은 고유 제한 조건이있는 테이블을 가지고, 내가 가진 문제는 내가에 해당 테이블을 사용하는 경우 발생하는 조인 CUSTOMER_ID에 대해서만 가입 할 수 있습니까? 위와 같은 방법으로 실적을 향상시킬 수 있습니까? 아니면 CUSTOMER_ID에 대한 지수를 특별히 만들어야합니까?

+2

이 성능에 도움이됩니다,하지만 당신은'에 익숙하지 않은 경우에만 CustomerID를 들어, 다른 컬럼을위한 별도의 인덱스를 –

+0

이 필요합니다 여기에 일치하는 계획을 보여주고 인덱스 열을 실패한 블로그입니다 설명 계획 '을 사용하는 방법에 대해 약간의 독서를하는 것이 좋습니다. 그런 다음,'where 절'기준을 다양하게하여 쿼리를 작성하여 해당 인덱스를 사용할지, 사용하지 않을지를 테스트 할 수 있습니다. – Dan

+0

@ Dan 님, 감사드립니다. – crimsonbinome22

답변

4

예, 오라클은 더 적은 열을 가진 색인과 동일한 방식으로 더 많은 열을 포함하는 색인을 사용합니다 (가장 왼쪽 열을 사용하는 한).

일부 조인은 물론 술어 또는 FK 확인의 경우에도 마찬가지입니다.

오라클 states :

복합 인덱스는 인덱스의 주요 부분을 사용하는 쿼리의 속도를.

여러 열이 포함 된 색인이 약간 크기 때문에 더 많은 페이지를 읽거나 버퍼 캐시를 더 많이 보관해야합니다. 그러나 여러 상황에서 하나의 색인을 사용하면 여러 항목을 유지하는 것이 더 좋습니다.

BTW : http://use-the-index-luke.com/sql/where-clause/the-equals-operator/concatenated-keys

+0

재미있는 정보에 대한 감사합니다! (CUSTOMER_ID) 또는 (CUSTOMER_ID, STORE_ID) 또는 (CUSTOMERID, STOREID, COUNTRYID) 중 하나에 조인 할 때 성능 이점을 제공 할 것입니다. 그러나 (STOREID, COUNTRYID)? – crimsonbinome22

+0

예. 적어도 칼럼이 병리학 적으로 분포되어 있지 않은 한) – eckes

+0

인덱스에 관심이있는 모든 컬럼이 포함되어 있다면, 테이블에 전혀 가지 않는 것이 좋습니다. 예를 들어'Select CountryID, StoreID CustomerID = '1'은 단일 인덱스 범위 스캔으로 충족됩니다. – eckes

관련 문제