[SQL 성능개선하기] - 인덱스 활용이 불가능한 이유 - 실전 예제 문제

이동찬·2023년 1월 28일
0

SQL

목록 보기
18/22

제시문

  • 위의 쿼리는 인덱스를 사용하지 말아야할 쿼리이다.
  • 위의 힌트는 인덱스를 강제적으로 사용하기 위한 것이다.

# 실행결과

  • 소요시간(elapsed : 12.34초)
  • 실행계획에 따르면 인덱스가 사용되어지고 있다.
  • 현재 옵티마이저는 CBO로 되어있다.(ALL_ROWS)
  • 찾는 데이터가 13만 8천여건이다.
  • 테이블의 전체 데이터 개수는 52만건인데 지금 13만 8천건이므로 15%를 초과한 상태이다. 지금의 쿼리는 인덱스를 사용하지 않을 때 속도가 빨리진다. (전체 데이터가 52만건이란건 어떻게 알았지?)

문제점에 대한 개요

  • group by를 1차 가공전에 먼저 적용시키는 것이 더욱 빠른 실행문이 된다.

수정문

  • FROM안에 들어있는 서브쿼리를 inline view라고 부른다.
  • inline view를 보면 인덱스를 사용하지 못하게 FULL SCAN HINT를 넣어놓았다.
  • 그리고 inline view안에 group by를 해놓았다. 얼마나 속도가 줄어들까?
  • 원래 GROUP BY 적용 자체는 SORTING된 결과를 나타내도록 되어있다. 근데 ORACLE 버전업이 된 중에 버전10G부터 GROUP BY에 의한 작업이 HASHING이 걸리게 되어있다. GROUP BY에 매커니즘이 바뀌었다. 그래서 실제 나타나는 결과 자체가 SORTING된 결과를 나타내지 않기 때문에 그 부분을 하지 않도록 하고자 기존과 동일하게 하고자 NO_USE_HASH_AGGREGATION을 사용한 것이다.

실행결과

  • 사진을 보면 view가 작동중이다.
  • 현재 hint 때문에 인덱스가 사용중이지 않다.
  • view안에서 group by를 사용하기에 894건으로 줄어들었다.

0개의 댓글

관련 채용 정보