몇일 전에 질문 드렸는데. 다시 한번 드립니다.
쿼리 1 >
select /*+index_desc( t_event i_event_alarmtime)*/
rownum rnum, seq_no
from t_event
where ((user_id in (select user_id from t_user where user_no = 1163))
and alarm_time between to_date('2013-03-27 00:00:00','yyyy-mm-dd hh24:mi:ss')
쿼리 2>
select /*+index_desc( t_event i_event_alarmtime)*/
rownum rnum, seq_no
from t_event
where ((user_id in (select user_id from t_user where user_no = 1163))
and user_id not in (select user_id from t_deleted_user where status = 1 ) )
and alarm_time between to_date('2013-03-27 00:00:00','yyyy-mm-dd hh24:mi:ss')
---------------------------
인덱스 i_event_alarmtime 은 ALL_IND_COLUMNS 테이블에서 확인 해보니 ,DESCEND 타입이 asc 속성을 만들어져 있네요.
쿼리 1은 alarm_time 값으로 내림차순(desc)으로 정상 잘 나옵니다.
그런데, 쿼리 2 에서 where 조건절에 subquery 조건이 하나 더 들어가면(파란색) 결과가 오름차순(asc)으로 나와서
전혀 반대방향으로 나와버리네요.
서브쿼리가 영향을 주는 것인가요 ? 준다면 어떻게 된 사연일까요 ?
아래는 실행계획입니다---------
쿼리 1>
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 355 (100)| | | |
| 1 | COUNT | | | | | | | |
|* 2 | TABLE ACCESS BY GLOBAL INDEX ROWID| T_EVENT | 15 | 345 | 355 (1)| 00:00:05 | ROW L | ROW L |
|* 3 | INDEX RANGE SCAN DESCENDING | I_EVENT_ALARMTIME | 19532 | | 60 (2)| 00:00:01 | | |
------------------------------------------------------------------------------------------------------------------------------------
쿼리 2>
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 360 (100)| | | |
| 1 | COUNT | | | | | | | |
|* 2 | HASH JOIN ANTI | | 1 | 49 | 360 (1)| 00:00:05 | | |
|* 3 | TABLE ACCESS BY GLOBAL INDEX ROWID| T_EVENTS | 15 | 345 | 355 (1)| 00:00:05 | ROW L | ROW L |
|* 4 | INDEX RANGE SCAN DESCENDING | I_EVENT_ALARMTIME | 19532 | | 60 (2)| 00:00:01 | | |
|* 5 | TABLE ACCESS FULL | T_DELETED_USER | 1 | 26 | 5 (0)| 00:00:01 | | |
-------------------------------------------------------------------------------------------------------------------------------------
|