쿼리 튜닝 관련 문의 드립니다. 0 3 1,700

by DDCC [SQL Query] 쿼리 튜닝 [2010.06.29 10:25:54]


안녕하세요. 쿼리의 튜닝 관련 문의 드립니다.

웹에서 총 접속 수, 오늘 접속 수 표시 포틀릿에서 사용하고 있는 쿼리입니다.


create table web_counter
(
    idx number(10)  not null,
    cdate   date,
    ip   varchar2(20)
);

create index idx_web_counter on web_counter (idx,cdate);


위의 table에 527,420 건이 저장되어 있습니다.
사용하는 쿼리는

SELECT /*+ index ( idx_web_counter ) */
   MAX( idx ), COUNT ( * )
  FROM web_counter
 WHERE TO_CHAR ( cdate, 'YYYYMMDD' ) = TO_CHAR ( SYSDATE, 'YYYYMMDD' )
/

와 같습니다.

초기 데이터가 얼마 없을 때는 아무런 이상이 없었지만, 건수가 50만 건 가까이 되니
속도가 너무 느립니다. ㅠ.ㅠ  그것도 아침에는 그럭저럭 (2초) 표시되지만, 저녁되면
심각해집니다. (19초)
이 부분을 개선할 수 있는 방법은 없을까요?
도움 부탁드립니다.

by v상이v [2010.06.29 10:30:47]
WHERE cdate >= TRUNC(SYSDATE)
AND cdate < TRUNC(SYSDATE)+1

이 조건이 낫지 않을까 합니다..

by 현 [2010.06.29 11:04:56]
일단, 테이블에 인덱스는 있으나 님의 쿼리에 맞는 인덱스는 없습니다.
cdate가 선행되는 인덱스가 필요합니다.
또한
TO_CHAR ( cdate, 'YYYYMMDD' ) 와 같이 컬럼을 변형하였기 때문에 인덱스 스캔을 할 수 없습니다.
v상이v 님 말씀처럼 쿼리를 변경하세요.

by DDCC [2010.06.29 13:12:20]
create index idx_web_counter on web_counter ( cdate);
상이님과 현님이 알려주신 대로 인덱스 새로 만들고 where 수정하니깐
2초대가 0.04초로 줄어 들었습니다.
감사합니다~~~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입