본문 바로가기

ORACLE/Oracle_Tunning

Oracle 쿼리 튜닝 포인트

반응형

1. * 존재여부

  • 일반적으로 *가 존재하면 필요없는 컬럼들도 함께 불러올 가능성이 높으며(랜덤액세스↑),
    추후에 컬럼 추가시 문제가 발생할 수 있다.

2. 컬럼이 있는 쪽은 변경하지 말고 우변에서 변수를 변경할 것

  • 인덱스를 아래 예시와 같이 변경하면 인덱스를 타지 못하고 풀스캔을 하게 된다.
TO_CHAR(TEST_DATE, 'YYYYMMDD') BETWEEN :변수1 AND :변수2
TEST_DATE BETWEEN TO_DATE BETWEEN TO_DATE(:변수1) || '0000', 'YYYYMMDDHH24MI') AND TO_DATE(:변수2 || '2359', 'YYYYMMDDHH24MI')

 

3. 스칼라 서브쿼리가 더 유용할지, LEFT OUTER JOIN이 더 유용할지 확인

  • 일반적으로 조건절에 따라 동일한 값을 반환하는 경우 해당값을 메모리에 올려놓기 때문에 스칼라서브쿼리가 유용하며,
    반대의 경우 LEFT OUTER JOIN이 더 유용하다.
    해당 값은 조건절에 따른 분포도나 변경 후 COST를 보고 판단

4. 인덱스는 랜덤액세스를 최소화한 방향으로 타고 있는지 확인


5. MAX(), SELF JOIN한 부분에서는 ROW_NUMBER()로 변경이 가능

  • 어떤값이 더 적은 COST를 쓸지는 쿼리 변경 후 COST를 보며 결정한다.

6. 반환하는 타입의 형변환이 필요하지 않은지 확인

  • 묵시적 형변환을 사용할 경우 더많은 COST가 발생하며 성능이 떨어진다.

7. 실시간 조회성 테이블일 경우 페이징 쿼리를 사용하고 있는지 확인

  • ROWNUM, ROW_NUMBER OVER(), RANK OVER() 등등

8. WHERE 조건절이 없는 DELETE문은 TRUNCATE를 사용

  • 쓸데없는 로그를 최소화한다.

9. OR 대신 UNION 을 사용

  • OR는 일반적으로 인덱스를 타지 못해 성능이 잘나오지 않는다.
    UNION을 사용할 수 있는 곳은 UNION을 사용하며, 중복이 없다는 확신이 있다면 UNION ALL 을 사용한다(필터링 COST제외).

10. 신규테이블일 경우 통계정보가 제대로 생성되어 있는지 확인

  • 생성되어 있지않다면 통계정보 수집 필요

 

반응형

'ORACLE > Oracle_Tunning' 카테고리의 다른 글

Oracle 튜닝시 자주 사용되는 힌트 정리  (0) 2025.02.20
ORACLE 플랜 확인 방법  (0) 2023.09.04