반응형
MAX 함수 튜닝
다음 쿼리를 튜닝해 보자
SELECT MAX(SEQ)
FROM ORDER_DETAIL
WHERE ORDER_NO = '00001'
ORDER_DETAIL의 INDEX정보
INDEX ORDER_DETAIL_PK(ORDER_NO, SEQ)
실행계획
0 SELECT STATEMENT Optimizer=ALL_ORWS
1 0 SORT (AGGREGATE)
2 1 INDEX(RANGE SCAN) OF 'ORDER_DETAIL_PK' (UNIQUE)
MAX를 얻기위해 INDEX를 RANGE ACCESS한후 SORT 후 가장 큰값을 도출하는 구조
INDEX는 생성시부터 SORT되어 있음으로 반대로 읽으면 한건만 읽게된다!
수정된 쿼리문
SELECT /*+ INDEX_DESC(ORDER ORDER_DETAIL_PK) */ SEQ
FROM ORDER
WHERE ORDER_NO = '00001'
AND ROWNUM = 1
실행계획
0 SELECT STATEMENT Optimizer=ALL_ORWS
1 0 COUNT(STOPKEY)
2 1 INDEX(RANGE SCAN DESCENDING) OF 'ORDER_DETAIL_PK' (UNIQUE)
MIN함수도 마찬가지입니다
다음 쿼리를 튜닝해 보자
SELECT MAX(SEQ)
FROM ORDER_DETAIL
WHERE ORDER_NO = '00001'
ORDER_DETAIL의 INDEX정보
INDEX ORDER_DETAIL_PK(ORDER_NO, SEQ)
실행계획
0 SELECT STATEMENT Optimizer=ALL_ORWS
1 0 SORT (AGGREGATE)
2 1 INDEX(RANGE SCAN) OF 'ORDER_DETAIL_PK' (UNIQUE)
MAX를 얻기위해 INDEX를 RANGE ACCESS한후 SORT 후 가장 큰값을 도출하는 구조
INDEX는 생성시부터 SORT되어 있음으로 반대로 읽으면 한건만 읽게된다!
수정된 쿼리문
SELECT /*+ INDEX_DESC(ORDER ORDER_DETAIL_PK) */ SEQ
FROM ORDER
WHERE ORDER_NO = '00001'
AND ROWNUM = 1
실행계획
0 SELECT STATEMENT Optimizer=ALL_ORWS
1 0 COUNT(STOPKEY)
2 1 INDEX(RANGE SCAN DESCENDING) OF 'ORDER_DETAIL_PK' (UNIQUE)
MIN함수도 마찬가지입니다
반응형