약200만건을 검색해서 원하는 데이터를 뽑아야 하는데 5초안에 가능 할까요?? ㅠㅠ 0 8 3,530

by 빠쿄 [2009.08.06 11:50:17]


제가 다루고 있는 서버는 응답 리미트 시간이 6초 라서 쿼리문은 5초 이내로 끊어야 하는 상황입니다.

그런데 한 테이블만 다루는데도 불구하고 데이터가 약 200만 건에 달하고 검색시간이 20초 정도 걸려서 죽겠네여

제가 쓴 쿼리는

select *from MWIPLOTHIS where
 TRAN_TIME >= ’20090120’
AND TRAN_TIME <= ’20090201’
AND OPER = ’ ’
and OLD_OPER = ’A0000’
AND FACTORY = ’CUSTOMER’

저 부분에서 날짜를 없애면 약 200만건 정도 되고 20초 이상 걸립니다. ( 날짜 있으면 거의 바로 되요 : 간격이 10일 이상되면 슬슬 느려짐 ) 그런데 불행하게도 날짜를 없애야 하는 상황입니다!!!

나온 결과를 토대로 저 쿼리를 썼을때 항상 나오는 다른 컬럼값을 조사해서 조건식에도 반영을 해 봤는데요

그래서 AND 문을 약 10개 정도 까지 늘려봤는데 데이터는 동일하게 나오지만

경우에 따라서 시간이 더 늘기도 하였고

시간이 줄어드는 경우도 있었지만 14초 정도 나왔습니다.

어떻게 해결할 수 있는 방법이 없을까요 ㅠㅠ

조인이나 유니온같은것도 안쓰고 순수하게 AND 만 썼는데도 시간이 꽤 오래걸리니 답답할 따름입니다 흑흑

ps:sql dev 2008쓰는데 비쥬얼스튜디오처럼 디버거랑 브레이크 포인트라도 있으면 좋겠네요ㅎㅎ;;

by 박민석 [2009.08.06 12:05:23]
날짜 컬럼을 검색조건에서 제외하면 결과셋이 200만건이란 소린가요?
이걸 5초안에 처리한다는건가요? 이건 아니겠죠.. ^^
전체 200만건중에 날짜 컬럼이 있으면 빠르게 나오고.. 날짜컬럼이 없을 경우 검색이 오래 걸린다는 소리신거 같은데요..
인덱스를 확인 해보세요..
아마도 날짜컬럼을 선두로 하는 인덱스가 생성되어 있을 겁니다.
위와 같은 경우 고객사측과 협의하여 필수 입력 조건값을 받고..
인덱스 선두에 두어야 합니다.
그렇지 않고 조건이 필요시 아무렇게나 들어 온다면 인덱스를 모든상황에 맞게 다 생성해주셔야 할듯 하네요..
참고로 인덱스를 모든상황에 맞게 생성하더라도 분포도가 안좋은 컬럼으로 잡게 되면 오히려 성능에 다 안좋은 결과를 가져 올수도 잇습니다.

by 빠쿄 [2009.08.06 12:08:10]
날짜 없으면 200만건이고 이걸 5초안에 검색해야 하는 상황이 맞습니다...ㅠㅠ

by 빠쿄 [2009.08.06 12:14:52]
음...인덱스를 써본적이 없어서 그런데요...킹초보라서 ㅠㅠ
제가 테이블은 수정하면 안되는 상황인데 인덱스를 생성한다는것은 테이블에
뭔가를 변경(추가/삭제/수정)해주는 것인가요?

by 빠쿄 [2009.08.06 13:05:31]
확인해보니 인덱스가 생성이 되어 있는데요
인덱스를 선두로 둔다는것은
and 조건절시 인덱스가 있는것을 앞쪽에 배치한다는 말씀이신가요??

by 구경서 [2009.08.06 13:40:17]
위내용 만으론 확인할수 없는게 많습니다.

by 유동환 [2009.08.06 16:16:19]
PLAN을 떠서 INDEX RANGE 스캔 타는지 확인해보세요.
인덱스 부분은 익숙해지는데 시간이 걸리시니까 ,
선임이나 팀장님같은 경험자와 꼭 함께 작업하시기 바랍니다.~~

> 해당테이블의 인덱스 내용을 알려주시면, 다른분들이 답변달기 좋지 않을까합니다~

by 빠쿄 [2009.08.06 16:51:54]
sql dev 에 plan 떠봤는데 INDEX RANGE 부분이 있네요...ㅠ.ㅠ
그런데 테이블이 너무 크고 컬럼도 많아서...어느부분을 알려드려야 할지...

by 박민석 [2009.08.06 17:37:14]
그런데요.. 200만건을 검색해서 어디다가 사용하실려는 건지요?
설마 화면에서 200만건을 뿌려 줄일은 없을 거구요..
선임이나 팀장급 계시면 업무 다시 확인토록 하세요..
딱 보니까..history 데이타를 테이블에 저정하고 검색해서 보는 업무 같은데요..
보통 위와 같은 업무는 날짜값 (여기선 tran_time 겠죠?)을 필수로 입력을 받도록 협의하여야 합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입