보통 최근 데이타를 보기 위해 2) 번과 같이 쿼리를 많이 날립니다. 그런데 마이그레이션 후 데이타가 존재 유무를 확인하기 위해 1)번과 같이 쿼리를 한번 날렸는데 결과가 나오는데 한세월 걸리더군요~~ ㅠㅠ
대부분의 데이터 rec_uk 값이 들어 있고 ATVT_DRU_DT 컬럼은 거의 100% 데이터가 들어 있습니다. 때문에 금방 나올거라 생각했는데.. 1) 번의 경우 기다리다 지쳐 중간에 끊었습니다.
2)번의 경우는 금방 나오구요~~
COM_ATVT_NU02 는 ATVT_DRU_DT + column01으로 이루어진 인덱스 입니다.
이거 혹시 왜 이런지 설명 가능할까요? 제 상식으로는 도저히 이해가 안가네요..
1) 힌트 미사용
select * from COM_ATVT
where ATVT_DRU_DT < ’99999999999999’
and rec_uk is not null and rownum <100;
Execution Plan
--------------------------------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=18M Card=99 Bytes=16K)
1 0 COUNT (STOPKEY)
2 1 TABLE ACCESS (BY INDEX ROWID) OF ’COM_ATVT’ (TABLE) (Cost=18M Card=2M Bytes=234M)
3 2 INDEX (RANGE SCAN) OF ’COM_ATVT_NU02’ (INDEX) (Cost=75K Card=18M)
2) 힌트 사용
select /*+ index_desc(COM_ATVT COM_ATVT_NU02) */ * from COM_ATVT
where ATVT_DRU_DT > ’00000000000000’ and
rec_uk is not null and rownum<100
Execution Plan
--------------------------------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=18M Card=99 Bytes=16K)
1 0 COUNT (STOPKEY)
2 1 TABLE ACCESS (BY INDEX ROWID) OF ’COM_ATVT’ (TABLE) (Cost=18M Card=2M Bytes=234M)
3 2 INDEX (RANGE SCAN DESCENDING) OF ’COM_ATVT_NU02’ (INDEX) (Cost=75K Card=18M)