WHERE절 좌변 가공 금지

.·2024년 4월 17일
0

ORACLE

목록 보기
7/8

1. 숫자형 인덱스 컬럼 가공

WHERE절의 좌변을 가공

SELECT SAL * 12
FROM EMP
WHERE SAL * 12 = 36000;

  • SAL 컬럼에 인덱스가 걸려있더라도 가공되었기 때문에 인덱스를 활용하지 못함 -> FULL TABLE SCAN

WHERER절의 우변을 가공

SELECT SAL * 12
FROM EMP
WHERE SAL = 36000/12;

  • INDEX 컬럼을 그대로 사용할 수 있기 때문에 INDEX RANGE SCAN을 탐

2. 문자형 인덱스 컬럼 가공

WHERE절의 좌변을 가공

SELECT JOB
FROM EMP
WHERE SUBSTR(JOB, 1, 3) = 'MAN';

  • FULL TABLE SCAN

LIKE문 사용

SELECT JOB
FROM EMP
WHERE JOB LIKE 'MAN%';

  • INDEX RANGE SCAN

3. 날짜형 인덱스 컬럼 가공

WHERE절의 좌변을 가공

SELECT HIREDATE
FROM EMP
WHERE TO_CHAR(HIREDATE, 'RRRR') = '1982';

  • FULL TABLE SCAN

BETWEEN 사용

SELECT  /*+ GATHER_PLAN_STATISTICS */HIREDATE
FROM EMP
WHERE HIREDATE
BETWEEN TO_DATE('1982/01/01', 'RRRR/MM/DD')
AND TO_DATE('1982/12/12', 'RRRR/MM/DD') + 1;
  • INDEX RANGE SCAN
  • 1982/12/12는 1982.12.12 00:00:00이므로 +1



[이지업클래스] 실무에서 바로 쓰는 SQL 튜닝법 수강 후 정리한 내용입니다.

0개의 댓글