2011-12-17 2 views
1

나는 다음 코드 예를 들어, DB2에 인덱스를 만들 때 :이 복합 인덱스은 기본적으로 db 인덱스 합성입니다?

CREATE INDEX T_IDX ON T(
A, 
B) 

입니까? 그렇지 않은 경우 어떻게 복합 색인을 만들 수 있습니까? 두 개의 서로 다른 인덱스가하기 위해 내가 별도로 작성해야합니다 같이 :

CREATE INDEX T1_IDX ON T(A) 
CREATE INDEX T2_IDX ON T(A) 

편집 : 예 경우 이 토론 내가 기대하는 방향으로 않을 것이다 (그러나 더 나은 하나 :)에) 실제로 방법을 묻는 , 왜 다른 인덱스를 만들지는 모르겠지만 다른 질문으로 그 계획을 세웠지 만, 당신이 나를 예상했기 때문에 :

테이블 T (A, B, C)와 검색 함수 검색 다음 방법 중 하나를 사용하여 표에서 선택하십시오.

WHERE A = x 
WHERE B = x 
WHERE C = x 
WHERE A = x AND B=y (and so on AC, CB, ABC) 

작성 색인 ABC를 작성하면 예를 들어 C를 선택할 때 작동하게됩니까? 테이블이 매우 큰이며, 삽입 \ 업데이트를 너무 자주하지

답변

2

네 여러 필드를 확인하세요 복합 인덱스를 생성하기 위해 두 개 이상의 컬럼 이름을 지정한다. 복합 인덱스를 사용하는 경우 이해

쿼리에 의해 선택된 모든 열이 복합 인덱스에있는 경우, DBENGINE 테이블에 액세스하지 않고 인덱스에서이 값을 반환 할 수 있습니다

... 당신의 마지막 질문이 될 것으로 보인다 . 그래서 당신은 더 빠른 탐색 시간을 갖습니다.

그러나 둘 중 하나를 쿼리에 사용하면 개별 인덱스를 만드는 것이 가장 효과적입니다. 실행되는 쿼리의 유형과 이들이 포함하는 값/filter/join에 따라 다릅니다.

가끔씩 하나 또는 다른 하나가있을 경우 3 개의 색인을 모두 만드는 것도 가능합니다. 그러나 각 추가 인덱스가 삽입, 업데이트 또는 삭제하는 데 걸리는 시간이 늘어남을 염두에 두십시오. 따라서 유지 관리가 많은 테이블에서는 인덱스 유지 성능 오버 헤드가 성능에 악영향을 미치므로 일반적으로 인덱스가 더 나쁩니다.

0

먼저 답변 : YES

CREATE INDEX JOB_BY_DPT 
     ON EMPLOYEE (WORKDEPT, JOB) 

두 번째 답변 :

그것은 귀하의 요청에 따라

; 대부분의 경우 쿼리 참조가 하나의 열에서 select * from T where A = 'something'과 같은 단일 색인을 원한다면 원하는 것이지만 열 A와 B 모두가 참조되면 해당 복합어를 작성해야합니다.

상기 referrence 들어 정의상 지수 = 생성 버튼

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000919.htm

+1

첫 번째 대답은 어떤 방식입니까? 귀하의 예는 OP가 제공 한 정보와 일치합니다. – xQbert

+1

그건 실수예요 ... 편집되었습니다. – Rahul

0

A, B의 색인은 복합 색인이며 B를 사용하여 A를 검색하거나 B를 사용하여 검색하거나 일반 검색을 위해 사용될 수 있습니다.

보통 A가있는 경우 A, B의 부분 검색을 사용할 수 있기 때문에 일반적으로 A, B 및 A의 색인에 색인을 붙이는 데별로 중요하지 않습니다.그러나 더 넓은 색인은 다소 덜 효율적입니다. 따라서 조회가 극도로 자주 발생하고 쓰기 요구 사항이 추가 색인을 업데이트하는 것이 허용된다면 정당화 될 수 있습니다.

A, B 색인은 B만을 기반으로하는 검색에는 적합하지 않으므로 B에 색인이 있어야 할 수 있습니다.

관련 문제