본문 바로가기
공부/DB

오라클 튜닝

by 미네밍 2019. 9. 22.

2019.09.22 [튜닝공부]

 

1. 내부적 형변환 

만일, 인덱스에 포함되어 있는 컬럼을 조건에 걸어줬는데도 full scan 을 하는 경우가 있다면,

인덱스의 컬럼 데이터 형 또한 고려해주어야 한다.

 

인덱스 컬럼이 varchar 형인데 불구하고, 숫자로 조건을 걸어주었다면 

이를 위해 컬럼의 값을 숫자로 형변환한다. 따라서, 인덱스가 걸리지 않고 full scan 을 타는 경우가 존재한다고 한다.

 

출처 : 구루비 

http://www.gurubee.net/lecture/2122

 

데이터타입 불일치 예제

튜닝 전   첫 번째 예제는 데이터타입이 틀릴 경우 인덱스를 사용하지 못하는 내용이다.   아래의 내용을 보면, EMP 테이블에 EMPNO_VARCHAR 컬럼으로..

www.gurubee.net

 

2. 외부적 형변환

 

보통, 화면에서는 컬럼과 다른 데이터형을 가지고 있어서, 컬럼 형식을 가공하는 경우도 있다.

예를들면 date 타입의 컬럼 인덱스가 걸려있는데, 이 컬럼을 가져올 때 TO_CHAR 함수를 사용해 년월일 만 가져온다던지 하는 경우다.

그런 경우도 인덱스를 타지 못한다고 한다.

 

SELECT EMPNO

           , JOB

           , TO_CHAR(HIREDATE, 'YYYYMMDD') HIREDATE

           , DEPTNO FROM

                                     (SELECT EMPNO

                                                 , JOB

                                                 , HIREDATE

                                                 , DEPTNO

                                        FROM EMP

                                      ) EMP_V

 WHERE EMP_V.HIREDATE BETWEEN :B1 -- 2009/01/01 00:00:00 AND :B2 -- 2009/01/31 23:59:59

 

EMP 테이블의 HIREDATE 를 가공하지 않고 가지고 올 수 있도록 EMP_V 를 만들고, 이를 한번 감싸 밖에서 TO_CHAR 함수를 통해 원하는 형식으로 변환해준다.

변수를 Date 타입으로 받도록 수정하여 주면, 인덱스를 탈 수 있다고 한다.

 

http://www.gurubee.net/lecture/2125

 

뷰 안의 조인(또는 조건)컬럼이 가공되어 있는 경우

튜닝 전   네 번째 예제는 View 또는 인라인 뷰 안에 인덱스로 존재하는 조인컬럼이 가공되어 있어 성능이 나빠지는 사례이다.   SQL 구조를 보면 EMP..

www.gurubee.net

3. Local Hint 로 인한 비효율

 

공용으로 쓰는 View 에 로컬 힌트를 걸어준 경우도 있다. 이런 경우, 로컬 힌트 때문에 제대로 인덱스를 타지 않는 경우가 생길 수 있다.

'공부 > DB' 카테고리의 다른 글

[SQL] ROWNUM 적용한 페이징 쿼리  (0) 2021.02.20
쿼리(LEAD)  (0) 2021.02.18
[SQL] ROWNUM = 2  (2) 2021.01.15
[SQL] Order by 문 변형  (0) 2021.01.15
[중첩루프조인] 오라클 조인 Nested Loop Join  (0) 2019.12.02

댓글