2014-08-29 3 views
0

현재 색인 구조와 관련하여 데이터베이스 스키마를 최적화하는 중입니다. 내 DDL 성능을 향상시키고 싶습니다. Oracle 12c 시스템에서 잠재적 인 드롭 후보를 찾고 있습니다. 다음은 인덱스를 삭제하면 쿼리 성능에 대한 결과가 어떤 것인지 알 수없는 시나리오입니다.오라클 : 표준 고유하지 않은 단일 열 인덱스를 고유 한 결합 인덱스로 대체 할 수 있습니까?

같은 테이블에 두 개의 인덱스 감안할 때 : - 고유하지 않은, 단일 컬럼 인덱스 IX_A (인덱스 컬럼 A) - 독특한 결합 인덱스 UQ_AB (인덱스 컬럼 A, 다음 B)

사용하여 인덱스 모니터링 I에게 쿼리 최적화 프로그램이 UQ_AB를 선택하지 않았지만 IX_A 만 선택했기 때문일 수 있습니다 (아마도 작고 읽기가 빠르기 때문일 수 있습니다). UQ_AB에는 A 열이 포함되어 있고 B 열에는 IX_A를 삭제하려고합니다. 내가 그렇게한다면 어떤 성과 처벌을받을 지 확신 할 수 없지만. 결합 된 고유 인덱스의 높은 선택성이 실행 계획에 영향을 미칩니 까?

답변

0

사소한 (보통) 가능성이 있지만 그래도 할 수 있습니다. 물론 그것은 여러 가지, 예를 들어 B 열의 값이 얼마나 큰지에 따라 다릅니다.

당신은 다음과 같은 두 개의 인덱스를 비교하는 USER_INDEXES, 다양한 열을 볼 수 있습니다 :

  • BLEVEL : 당신은 인덱스 트리의 "높이"를 알려줍니다
  • (물론, 높이 BLEVEL + 1)
  • LEAF_BLOCKS : 블록 인덱스가 차지하는 얼마나 많은 데이터가
  • DISTINCT_KEYS 값 : "선택"인덱스가

가 (당신이이 정확할 것으로 먼저 테이블을 분석 한 필요) 방법. 오라클이 색인을 사용하여 행을 찾기 위해 수행해야하는 작업량을 알 수 있습니다.

물론 정말로 확실한 유일한 방법은 벤치 마크하고 타이밍을 비교하거나 출력을 추적하는 것입니다.

+0

답장을 보내 주셔서 감사합니다. 특히 인덱스 높이를 삭제하거나 유지할지 여부를 결정할 때 인덱스 높이를 사용하면 USER_INDEXES을 (를) 확인할 수 있습니다. 그럼에도 불구하고 나는 그것을 시도하고 지수를 떨어 뜨리고 내 벤치마커가 어떻게 행동하는지 보게 될 것이다. 오라클이 실행 계획 계산에서 고유 한 결합 인덱스를 사용하는 방식에 약간의 체계적인 차이가 있는지는 확실하지 않았습니다. – Patze

관련 문제