안녕하세요?
이해가 잘 되지 않은 부분이 있어 도움을 구하고자 이렇게 글을 쓰게 되었습니다.
실행계획과 실제 쿼리 수행속도에 관한 내용인데요.
실행계획에서의 Cost 비용이 적게 나온것이 실제 쿼리를 실행시킨 속도가 늦게 나오는 현상이 발생합니다.
* 테스트 정보
- Oracle 10g 사용, Orange Tool 사용하여 측정
- A Table 의 결합인덱스 : I_INDEX ( YYMM + B + C + D + ...)
실행쿼리 1 |
실행쿼리 2 |
|
SELECT * FROM A WHERE yymm BETWEEN ’200901’ AND ’200906’ AND B컬럼 = ’OK’ AND C컬럼 = ’OK’ |
SELECT /*+ INDEX( A I_INDEX ) */ * FROM A WHERE yymm BETWEEN ’200901’ AND ’200906’ AND B컬럼 = ’OK’ AND C컬럼 = ’OK’ |
실행계획 1 |
실행계획 2 |
|
Optimizer=ALL_ROWS TABLE ACCESS (FULL) OF ’A’ (TABLE) ( Cost = 452K Card = 3M Bytes = 286M ) |
Optimizer=ALL_ROWS TABLE ACCESS (BY INDEX ROWID) OF ’A’ (TABLE) ( Cost = 554K Card = 3M Bytes = 286M ) |
쿼리수행시간1 |
쿼리수행시간 2 |
|
14.78 sec |
0.09 sec |
위에서 보면 실행계획1의 비용이 실행계획2보다 적게 나타나는데도 실제 수행시간은 더 많이 걸리는 현상이 발생합니다.
어떤경우에 이런현상이 나타날수 있나요?
(참고 : 테이블 A 및 인덱스에 대해서는 최근에 Analyze 작업을 하고 테스트 하였습니다.)