오라클 인덱스를 사용하지 못하는 경우에 대한 쿼리 예시입니다.
부정으로 비교하는 경우 : ‘!=’, ‘NOT IN’, ‘NOT LIKE’
SELECT empno,
ename,
job
FROM emp
WHERE empno != ‘1234’
==> 해결방법
SELECT empno,
ename,
job
FROM emp
WHERE NOT EXIST
( SELECT ‘X’
FROM emp
WHERE emono = ‘1234’ )
NULL 로 비교하는 경우 : ‘IS NOT NULL’
SELECT empno,
ename,
job
FROM emp
WHERE ename IS NOT NULL
==> 해결방법
SELECT empno, ename, job
FROM emp
WHERE ename > ‘’
인덱스 컬럼에 변형을 가한 경우
SELECT empno,
ename,
job
FROM emp
WHERE TO_CHAR(hiredate, ‘YYMMDD’) = ‘990101’
==> 해결방법
SELECT empno,
ename,
job
FROM emp
WHERE hiredate = TO_DATE(‘990101’, ‘YYMMDD’)
인덱스 적용 원칙의 역이용 (분포도가 안 좋은 경우나 자료가 적은 경우)
SELECT SUM(col1)
FROM tab1
WHERE status = ’90’
==> 해결방법
SELECT SUM(col1)
FROM tab1
WHERE RTRIM(status) = ’90’ [status값의 변형이 일어남으로 Index사용하지 않음] -> Function Based Index의 경우는 사용함
복합(Composite) 인덱스
: 복합 인덱스인경우 인덱스 컬럼의 첫번째 컬럼에는 조건이 있어야 인덱스를 탈 수 있습니다.
예) projno, empno가 복합인덱스
SELECT start_date
FROM assignments
WHERE projno = 100
인덱스가 사용됨
SELECT start_date
FROM assignments
WHERE projno = 100
AND empno = 7902
인덱스가 사용됨
SELECT start_date
FROM assignments
WHERE 1=1
AND empno = 7902
인덱스가 사용안됨
'프로그램이야기 > oracle' 카테고리의 다른 글
ORACLE COUNT 절 GROUP BY 같이 이용하는 경우 (0) | 2015.12.23 |
---|---|
오라클 equal 조회 검색 결과가 안나오는 경우 (0) | 2015.12.17 |
컬럼명으로 테이블 찾는 쿼리문 (0) | 2015.08.24 |
댓글