태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[오라클 질문] plan에서 filter 조건이 있고 없고의 차이

기술이야기/Ask 엑셈 2010. 8. 23. 10:20

2010-07-27 12:34:55 에 등록된 질문입니다.  엄정훈 님께서 질문해 주셨습니다.

cost를 놓고 봤을 때는 filter 조건이 없는 것이 유리해 보이나, range scan 후 리턴되는 byte로 보면 필터가 있는 쪽이 유리해 
보입니다.실제로 실행을 해보면 필터있는 쪽이 훨씬 오래 걸리구요.

1) test_cd + chg_cd + prod_cd 로해서 좁혀진 범위 안에서 seq_no로 filter를 하게 되면 return 되는 양은 적어지고, 시간도 
filter가 없는 경우와 큰 차이가 없을 것 같은데 실행시간의 차이가 많이 나는 이유는 무엇일까요?
2) 모든 경우가 다 이와같지는 않겠지만, 아래와 같은 결론이라면 한 번이라도 더 step(filter를 안하도록 유도)을 줄이는게 좋은건지....


※ seq_no column : varchar2(2)
※ I_TEST01_01 : test_cd + chg_cd + prod_cd + d_day
※ test01 전체 건수 :  3700만건

<BEFORE - seq_no < '99' 조건이 있을 때>  --> 133초
------------------------------------------------------------------------------------------
-
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     
|
------------------------------------------------------------------------------------------
-
|   0 | SELECT STATEMENT             |            |     1 |    19 |    25   (0)| 00:00:01 
|
|   1 |  SORT AGGREGATE              |            |     1 |    19 |            |          
|
|*  2 |   TABLE ACCESS BY INDEX ROWID| TEST01      |    78 |  1482 |    25   (0)| 
00:00:01 |
|*  3 |    INDEX RANGE SCAN          | I_TEST01_01 |   199 |       |     1   (0)| 
00:00:01 |
------------------------------------------------------------------------------------------
-

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("A"."SEQ_NO"<'99')
3 - access("A"."test_cd"='01' AND "A"."chg_cd"='AAA' AND "A"."prod_cd"='100')


<BEFORE - seq_no < '99' 조건이 없을 때>  --> 0.3초
--------------------------------------------------------------------------------
| Id  | Operation         | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |            |     1 |    16 |     1   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE   |            |     1 |    16 |            |          |
|*  2 |   INDEX RANGE SCAN| I_TEST01_01 |   199 |  3184 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("A"."test_cd"='01' AND "A"."chg_cd"='AAA' AND
"A"."prod_cd"='100')
 

A:             엑셈 답변 보기

 
  • 호호호 2016.02.03 23:14 ADDR 수정/삭제 답글

    답변보기 누르면 에러 나는데 어떻게 볼수 있나요?