기존 애플리케이션에 대한 추가 기능을 작성하고 있으며 다양한 거래 유형에 대한 수량 합계를 가져와야합니다. 각 트랜잭션 유형에는 ta_code, ta_type 및 ta_asc 기준의 고유 한 세트가 있습니다.
아래 쿼리는 필요한 정보를 반환하지만 결국 trans 테이블에는 약 5 백만 개의 레코드가 있으므로 실행하는 데 4 분이 걸립니다.
SELECT t.qty AS tQty, sQty, rQty, mQty, lQty, aQty, xQty, t.itmcode
FROM trans AS t
LEFT JOIN
(
SELECT sum(qty) as sQty, itmcode
FROM trans
WHERE
site = 127
AND ta_code = '12'
GROUP BY itmcode
)as tblS ON tblS.itmcode = t.itmcode
LEFT JOIN
(
SELECT sum(qty) as rQty, itmcode
FROM trans
WHERE
site = 127
AND ta_code = '12' AND ta_type = '1'
GROUP BY itmcode
)as tblR ON tblR.itmcode = t.itmcode
LEFT JOIN
(
SELECT sum(qty) as mQty, itmcode
FROM trans
WHERE
site = 127
AND ta_code = '15' AND ta_type = '4'
GROUP BY itmcode
)as tblM ON tblM.itmcode = t.itmcode
LEFT JOIN
(
SELECT sum(qty) as lQty, itmcode
FROM trans
WHERE
site = 127
AND ta_asc = '147'
GROUP BY itmcode
)as tblL ON tblL.itmcode = t.itmcode
LEFT JOIN
(
SELECT sum(qty) as aQty, itmcode
FROM trans
WHERE
site = 127
AND ta_asc = '155'
GROUP BY itmcode
)as tblA ON tblA.itmcode = t.itmcode
LEFT JOIN
(
SELECT sum(qty) as xQty, itmcode
FROM trans
WHERE
site = 127
AND ta_asc = '155' AND ta_code = '15' AND ta_type = '4'
GROUP BY itmcode
)as tblX ON tblX.itmcode = t.itmcode
INNER JOIN item AS i ON i.code = t.itmcode
WHERE t.site = 127
GROUP BY itmcode
각 조인은 비 효율성을 증가시키는 것처럼 보이지만 개별적으로 실행하더라도 각 조인 선택은 실행하는 데 10 초 이상 걸립니다. 이 데이터베이스에 대한 읽기 권한 만 있으므로 어떤 식 으로든 변경할 수 없습니다.
이를보다 효율적으로 달성 할 수있는 방법이나 구조에 대해 조언 해 주시면 감사하겠습니다.
시도해 볼 가치가 있습니다. 모든 "left join"절을 제거하고 다음과 같이 조건부 합계를 계산합니다.
SELECT
ISNULL(SUM(CASE WHEN ta_code = '12' and ta_type='1' THEN Qty ELSE 0 END), 0) as rQty,
ISNULL(SUM(CASE WHEN ta_code = '15' and ta_type='4' THEN Qty ELSE 0 END), 0) as mQty
FROM trans AS t
WHERE t.Site = 127
GROUP BY itmcode
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다