count 속도가 너무 느립니다. 0 3 12,963

by 손님 count [2009.08.18 17:43:56]


create table test_parent ( p_key number,  p_col1 varchar2, ....);

 

create table test_child (c_key number, p_key number,  c_col1 varchar2, c_col2 clob, ...);

 

위와 같이 test_parent 라는 테이블과 test_child 라는 테이블이 있습니다.

 

test_child는 test_parent 의 자식테이블로 데이터가 억단위로 쌓여 있습니다.

 

test_parent에는 키값인 p_key 컬럼 유니크 인덱스가 있고,  test_child에는 키값인 c_key 컬럼 유니크 인덱스와 부모키의 연결고리인 p_key 컬럼 인덱스가 존재합니다.

 

문제는 test_child 테이블에서 p_key 컬럼값으로 카운트를 하는데.. 일부는 천만건이 넘어 속도가 매우 느립니다.

 

select count(1)

  from test_child

 where p_key = 1000000007

   and c_col1 = ’Y’;

 

 

인덱스를 이용하지만 대상 데이터 건수가 많아서인지 어떻게해도 답이 안나오네요..

 

 

부디 도와주시기 바랍니다.ㅠㅜ

by 웅 [2009.08.19 07:34:19]
처리해야할 물리건수가 많다면 패러럴처리하는것도 방법일 수 있겠네요.
select /*+ index_ffs(test_child pk_indname)
parallel_index(test_child pk_indname) */
count(1)
from test_child
where p_key = 1000000007
and c_col1 = ’Y’;

by 마농 [2009.08.19 08:03:00]
자주 사욜될 쿼리라면 c_col1과 함께 복합인덱스를 구성해 보세요.
천만번의 테이블 랜덤엑세스를 없애고 인덱스스캔만으로 카운트할수 있겠네요.

by 손님 [2009.08.19 08:36:43]
두분 답변 감사합니다.
c_col1 컬럼의 경우 매번 쓰는 컬럼인지라 함께 인덱스로 잡아봤습니다.
기존 몇분을 기다리던것이 8초안으로 나오네요..ㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입