속도 개선 count() 0 3 2,146

by skyconfia [2014.02.11 11:04:56]


한테이블에 년도별로 data가 500건 정도 존재하고 저장 버튼 클릭시 
    (순서1) 각각의 row가 존재하는 체크진행함
       select count(0) into cnt from 테이블
   where 조건...

    (순서2)  cnt 갯수를 파악하여 존재하면 update 없으면 insert 를 진행하고 있습니다.

현재 저장 버튼 클릭시 한 80초 가량 소요가 되는데.. 아무래도 건건이 count를 진행하고 그에따라 분기하기에 시간이 소요 된다고 생각합니다. 
속도 개선을 위해 좋은 방법이 없을까요? 
고수 여러분들께 문의 드립니다.  
by 홍상표 [2014.02.11 11:20:06]
cnt 갯수를 정확히 파악해서 update, insert하는게 아니라..

조건에 맞는 row가 존재하면 update, 없으면 insert 하는 거라면..

count를 전체 구하는게 아니라..  조건에 rownum = 1 이란걸 넣어주는 것도 방법 같습니다..

아니면..

select  case when exists ( select 'x' from 테이블 where 조건 ) then 1 else 0 end into cnt
from dual

by 마농 [2014.02.11 11:28:48]
500 건을 루프돌면서 select count, if (update or insert) 하는 구조라면?
500건을 이용해 한번에 Merge 하는 방식으로 바꿔 보세요.
http://www.gurubee.net/lecture/2225

아 그리고 그전에 느려지는 원인을 먼저 확인해 보세요.
조건에 맞는 적절한 인덱스가 없을 것 같네요.

by skyconfia [2014.02.11 13:25:15]

홍상표님 마농님~ 좋은 답변 감사드립니다.
덕분에 많이 배우고 갑니다. 좋은 하루 보내세요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입