Index 생성유무 판단 좀 도와주세요 0 3 1,709

by 몽키매직 [DB 모델링/설계] index [2013.08.02 15:33:56]




한때 모델링을 겉핡기로 잠깐 배워본 학생입니다.

두개의 테이블이 있습니다... A -< B 로 일대 다 관계 입니다.

하루에 insert건은 대략 적게는 2백만건에 많게는 7~8백만 건이라고 했을경우

받는 패킷을 A테이블에 insert 시키고 값에따라 B테이블에 FK로 1~3개 insert 됩니다.
( A테이블에 들어가는 row가 위에 가정한 숫자이고 B테이블은 1.5.배정도 된다고 보시면 됩니다.)

대략 구조는 이렇고 데이터는 한번에 약 70~80만건씩 들어옵니다..   하루종일 꾸준히 들어오는게 아니고 .. 그래서 요청을 두서번

하면 적게 2백만건이고 약 10번정도 했다고 치면 7~8백만건이라고 한겁니다.

근데 A테이블중에 날짜컬럼이 있는데 시분초까지 들어갑니다.  이걸 일일통계 냅니다.  새벽에 스케쥴이 돌아가는데

60만건 데이타 쿼리 돌려봤는데 3분이나 걸리네요;;

select ......
from a. b
where a.seq = b.seq and a.date like to_char(sysdate-1, 'yyyymmdd')||'%'
group by  zipcode, house

대략 이런식인데.. 

현재 각 seq에는 index가 걸려있고  b테이블에는 (seq,house) 하나 더 있습니다.

date에 index를 거는게 좋은지 안좋은지 잘 모르겠습니다.. index를 걸면 insert에서 느려질것 같아서..

insert는 신속히 작업되어야 하고 솔직 통계는 새벽에 스케쥴이기에 빠르지 않아도 되긴 한데 db서버 cpu점유율이 높아져서..;;
by 야신 [2013.08.02 17:33:14]
date가 varchar유형이라면 seq+date 를 가진 인덱스를 하나 추가하시는것이 좋아 보입니다 저정도라면 insert 작업시 부하가 별로 없을겁니다

by 손님 [2013.08.02 17:47:54]

A 테이블에는 DATE 필드에 단일 인덱스
B 테이블에는 SEQ 단일 인덱스

A 테이블부터 보게 LEADING 힌트를..

select /*+ LEADING(A)*/......
from a. b
where a.seq = b.seq and a.date like to_char(sysdate-1, 'yyyymmdd')||'%'
group by zipcode, house

A.DATE 필드 조회 조건을 LIKE 보다는

select /*+ LEADING(A)*/......
from a. b
where a.seq = b.seq
AND A.DATE >= TO_CHAR(SYSDATE-1, 'yyyymmdd')||'00'
AND A.DATE < TO_CHAR(SYSDATE, 'yyyymmdd')||'00'

이렇게 하는게 좋을 거같은데요.

group by zipcode, house

by 손님 [2013.08.02 17:48:30]

이렇게 하는게 좋을 거같은데요.

group by zipcode, house

위 2줄 위치 변경을....
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입