date 타입을 썼느냐 char 타입을 썼느냐면 다릅니다.
(1)
SELECT u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME
,u.TOTAL_VALUE
,u.TOTAL_NUM
,u.MIN_VALUE
,INST1.fnpempa9001(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME, u.MIN_VALUE) MIN_TIME
,u.MAX_VALUE
,INST1.fnpempa9002(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME, u.MAX_VALUE) MAX_TIME
,INST1.fnpempa9003(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME) LAST_VALUE
,INST1.fnpempa9004(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME) LAST_TIME
FROM (SELECT OBJECT_ID, DATE_DAY, DATE_TIME
,SUM(VALUE) TOTAL_VALUE
,COUNT(VALUE) TOTAL_NUM
,MIN(VALUE) MIN_VALUE
,MAX(VALUE) MAX_VALUE
FROM (
SELECT OBJECT_ID,VALUE_HISTORY_ID, VALUE, DATE_DAY, DATE_TIME
FROM (SELECT a.OBJECT_ID, a.VALUE_HISTORY_ID, a.VALUE
,TO_CHAR(a.TIMESTAMP,'YYYYMMDD') DATE_DAY
,TO_CHAR(a.TIMESTAMP,'HH24') DATE_TIME
FROM INST1.TSPEMPA60 a, INST1.TSPEMPA50 b
WHERE a.OBJECT_ID = b.OBJECT_ID
--AND b.NODE_NAME = 'atmsdb1' /*Input - 서버명*/
)
WHERE 1=1
AND DATE_DAY = '20070227' /*Input - 날짜*/
)
GROUP BY OBJECT_ID, DATE_DAY, DATE_TIME
) u
(2)
SELECT u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME
,u.TOTAL_VALUE
,u.TOTAL_NUM
,u.MIN_VALUE
,INST1.fnpempa9001(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME, u.MIN_VALUE) MIN_TIME
,u.MAX_VALUE
,INST1.fnpempa9002(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME, u.MAX_VALUE) MAX_TIME
,INST1.fnpempa9003(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME) LAST_VALUE
,INST1.fnpempa9004(u.OBJECT_ID, u.DATE_DAY, u.DATE_TIME) LAST_TIME
FROM (SELECT a.OBJECT_ID, DATE_DAY, DATE_TIME
,SUM(VALUE) TOTAL_VALUE
,COUNT(VALUE) TOTAL_NUM
,MIN(VALUE) MIN_VALUE
,MAX(VALUE) MAX_VALUE
FROM INST1.TSPEMPA60_T a, INST1.TSPEMPA50 b
WHERE a.OBJECT_ID = b.OBJECT_ID
AND b.NODE_NAME = 'atmsdb1' /*Input - 서버명*/
AND DATE_DAY = '20070227' /*Input - 날짜*/
GROUP BY a.OBJECT_ID, DATE_DAY, DATE_TIME
) u
데이터는 원시 테이블의 데이터 건수가 천만건 이내이며
속도는 (1)번 쿼리가 (2)번 보다 30배 정도 빠릅니다.
유일한 차이는 TIMESTAMP라고 되어 있는 컬럼이 DATE 타입으로 정의되어 있는데
이 부분이 DATE_DAY와 동일하게 타입만 다른것이거든요.
원래 DATE 타입이 빠른건지... 이정도로 빠른건지 알고 싶습니다.
아님 속도 차이가 나는데 다른 요인이 있었던 건지...
인덱스는 (1)경우에 OBJECT_ID 에 걸려 있으며
(2)경우에 OBJECT_ID 그리고 NODE_NAME, DATE_DAY에 걸려 있는 상태입니다.
짧은글 일수록 신중하게.