Q&A

  • 다음 쿼리 시간이 너무 걸리는데 단축시킬 방법이 있을까요?
SELECT A88_ACCOUNT, A88_AMOUNT
FROM    ACT_MONJIP88
WHERE  A88_MONTH = '07'
MINUS                                                                                               SELECT A88_ACCOUNT, A88_AMOUNT                                        
FROM    ACT_MONJIP88  
WHERE  A88_MONTH = '07'                                                
AND    SUBSTR(A88_VOUCHER_NO,1,11)
           IN (SELECT A03_VOUCHER_NO
               FROM   ACT_JUNPYO01 ,ACT_JUNPYO03
               WHERE  A01_REFERENCE_NO = A03_REFERENCE_NO
               AND      A01_DIVISION_NO = '3')

ACT_MONJIP88 테이블에서

전표테이블의 부서 코드가 3인 전표를  제외하하는 쿼리 입니다.

시간이 8초정도 걸리는데 이방법 저방법 써바도 더욱 느려지더군요

이방법이 가장 빠릅니다. 혹시 다른 좋은 방법이 있을까요?
3  COMMENTS
  • Profile
    착한천사 2004.08.30 01:15
    착한천사 김경록입니다..

    저의 소견으로는
    일단, 같은 TABLE을 2번 READ하는 문제인
    MINUS를 사용한 것 때문에 그렇다고 보여집니다.

    또한, 이런 문제를 올려주실때에는 많은 정보가 필요합니다..
    왜냐하면, SQL Tunning 문제이기 때문에 그렇습니다..


    먼저,
    1.  DBMS의 종류,
    2.  각 table에서의 INDEX,
    3.  각 TABLE data 건수,
    4.  WHERE에 의해서 걸러진 각 TABLE의 DATA 건수
    (예.. a88_month='07'일때 건수)

    이외, TABLE의 분할정도나, TABLESPACE등등이 있지만,
    DBMS를 알지 못하는 입장에서..
    1~4번까지만 먼저 제시하셨으면 좋았을 것 같군요..


    먼저, 이론상으로는

    SELECT A88_ACCOUNT, A88_AMOUNT
    FROM    ACT_MONJIP88
    WHERE  A88_MONTH = '07'

    에서 minus를 하는게 아니고,
    filter를 해야하는게 맞을 것 같습니다.
    물론, 실행계획을 확인하셔서 적절히 index를 타는지 확인하시구,
    index를 타지 않는다면, index를 타게끔 hint를 사용해 보시길 권고합니다.)

    ps.
    그리고, TABLE은 가능한 1번만 FROM에 나열되도록 해 주시는게
    속도에 도움이 되실 겁니다.


    [ 제안할 SQL문 ]

    SELECT A88_ACCOUNT, A88_AMOUNT
    FROM    ACT_MONJIP88
    WHERE  A88_MONTH = '07'
    and not exists (select 1 FROM   ACT_JUNPYO01 ,ACT_JUNPYO03
                   WHERE  A01_REFERENCE_NO = A03_REFERENCE_NO
                   AND      A01_DIVISION_NO = '3'
                   and  A03_VOUCHER_NO = SUBSTR(act_monjip88.A88_VOUCHER_NO,1,11)

    답이 되셨길 바랍니다..



  • Profile
    고진중 2004.08.30 20:20
  • Profile
    Jung 2004.08.28 19:28
    맞을지 모르겠지만...
    서브쿼리의
    에서
    두 조건의 순서를 바꿔보세요...
    테이블 조인에서 시간이 많이 걸릴듯 한데...

    DB를 잘은 모르지만.. 한번 끄적 거려봅니다...
    즐거운 주말보내세요...