- 인덱스 스캔의 효용성에 대해 자세히 알아본다
- 인덱스 풀 스캔(Index Full Sacn)과 인덱스 패스트 풀 스캔(Index Fast Full Scan)의 장단점 및 사용 방법에 대해 자세히 알아본다
- 인덱스 스캔보다 테이블 풀 스캔(Table Full Scan)이 유리한 상황을 알아본다
SELECT COUNT(*)
FROM EMPLOYEE A
WHERE A.DEPT = 'HR'
AND A.YEARS = '2023'
AND A.SAL > 2000;
--IDX01 : DEPT + MGR + YEAR
--IDX02 : DEPT + SAL + YEAR
인덱스 컬럼을 가공하거나 변형하면 제대로 타지 않는다.
-- 예시 1
SELECT * FROM 업체
WHERE SUBSTR(JOB, 1, 4) = 'SALE' --BAD
WHERE JOB LIKE 'SALE%' --GOOD
-- 예시 2
SELECT * FROM 사원
WHERE 월급여 * 12 = 36000000 --BAD
WHERE 월급여 = 36000000/12 --GOOD
-- 예시 3
SELECT * FROM 고객
WHERE 연령 || 직업 = '30공무원' --BAD
WHERE 연령 = 30 AND 직업 = '공무원' --GOOD
-- 예시 4 (회원번호 3자리, 지점번호 1자리)
:STR = 1001
SELECT * FROM 회원사지점
WHERE 회원번호 || 지점번호 = :STR --BAD
WHERE 회원번호 = SUBSTR(:STR, 1, 3) --GOOD
AND 회원번호 = SUBSTR(:STR, 4, 1)
-- 예시 5 (지수구분코드 1자리, 지수업종코드 3자리)
SELECT * FROM 주문
WHERE 거래일자 BETWEEN '20230101' AND '20230331'
AND 지수구분코드 || 지수업종코드 IN (('1001'),('2003')) --BAD
AND (지수구분코드, 지수업종코드) IN (('1','001'),('2','003')) --GOOD
GROUP BY 거래일자
-- 예시 6
SELECT * FROM 주문
WHERE NVL(주문수량,0) >= 100 --BAD
WHERE 주문수량 >= 100 --GOOD