오라클은 11g 고 매출테이블에 인덱스가 지역, 매출일 순으로 잡혀있습니다.
매출일별 count 를 하고자 아래와 같이 조회했더니 금방나왔습니다.
인덱스 : INDEX SKIP SCAN, SORT_GROUP_BY
1)
select 매출일, count(*)
from 매출
where 매출일 = '20131201'
group by 매출일
그런데 아래와 같이 하였더니 오래걸려도 도통 나올생각을 안합니다.
인덱스 : INDEX FULL SCAN , HASH_GROUP_BY
2)
select 매출일, count(*)
from 매출
where 매출일 IN ( '20131201','20131202')
group by 매출일
아래와 같이 하면 또 빠르더군요.
3)
select 매출일, count(*)
from 매출
where 매출일 = '20131201'
group by 매출일
union all
select 매출일, count(*)
from 매출
where 매출일 = '20131202'
group by 매출일
2) 번의 SQL 을 3번 한것처럼 할수 있는 힌트가 있을까요? USE_CONCAT 써 보았지만
먹질 안내요. ㅡ_ㅡ;;
----------------------------
ps) select 매출일, count(*)
from 매출
where 매출일 between '20131201' and '20131202'
group by 매출일
이렇게 했더니
INDEX SKIP SCAN , HASH GROUP BY 플랜을 거쳐 엄청 빨리 나왔습니다.
IN 이 BETWEEN 보다 낫다고 알고 있었는데 멘붕이 오네요.
ps2 ) 바로 위의 것이 IN 보다는 빨랐지만 3) SQL 보다는 느렸네요.
혹시 오해가 있을까봐 추가합니다.