내 SQL 명령은 다음과 같습니다.
SELECT
ts.CHECK_NUMBER,
ts.CUSTOMER_NAME,
ts.COMPANY_NAME,
( SELECT COUNT(*)
FROM TRANSACTION_ORDER too
WHERE too.CHECK_NUMBER = ts.CHECK_NUMBER
) as NB_OF_ORDERS
FROM
TRANSACTION_SUMMARY ts
ORDER BY
ts.BUSINESS_DATE
데이터를 렌더링하는 데 시간이 너무 오래 걸리므로 최소 3000 개의 트랜잭션에 대해 이야기하고 있습니다. 각 트랜잭션은 주문을 계산해야합니다.
더 나은 해결책이 있습니까?
select에이 하위 쿼리가있을 때 외부 쿼리에 의해 반환 된 각 행에 대해 실행되기 때문에 너무 오래 걸립니다. 따라서 외부 쿼리가 50,000 개의 행을 반환하면이 내부 선택 쿼리가 50,000 번 실행됩니다. 성능 킬러,
이런 식으로 해봐 ....
SELECT
ts.CHECK_NUMBER
,ts.CUSTOMER_NAME
,ts.COMPANY_NAME
,ISNULL(O.Total, 0) AS NB_OF_ORDERS
FROM TRANSACTION_SUMMARY ts
LEFT JOIN --<-- use inner join is you only want records with some orders
( SELECT CHECK_NUMBER, COUNT(*) AS Total
FROM TRANSACTION_ORDER
GROUP BY CHECK_NUMBER
) as O
ON ts.CHECK_NUMBER = O.CHECK_NUMBER
ORDER BY ts.BUSINESS_DATE
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다