아래 2 옵션은 동일한 결과를 얻었으며 실행 시간은 거의 같습니다. 한 성능MSSQL : 하위 쿼리 내부 또는 외부의 조건
옵션 A의 측면에서 더 나은하는 저를 알려 주시기 바랍니다 : 조건은 하위 쿼리입니다. 실행 시간 : 3 SECS
SELECT
a.Sales_ID, a.Sales_No, a.Sales, b.Collection
FROM
(
SELECT Month, Sales_ID, Sales_No, Sum(Sales) 'Sales'
FROM FT_Sales a
JOIN LU_Month b on a.Day=b.Day
WHERE b.Month=201607
GROUP BY Month, Sales_ID, Sales_No
) a
JOIN
(
SELECT Month, Sales_ID, Sales_No, Sum(Collection) 'Collection'
FROM FT_Payment a
JOIN LU_Month b on a.Day=b.Day
WHERE b.Month=201607
GROUP BY Month, Sales_ID, Sales_No
) b on a.Sales_ID=b.Sales_ID
옵션 B : 조건은 하위 쿼리 밖에 있습니다. 실행 시간 : 3 SECS
SELECT
a.Sales_ID, a.Sales_No, a.Sales, b.Collection
FROM
(
SELECT b.Month, Sales_ID, Sales_No, Sum(Sales) 'Sales'
FROM FT_Sales a
JOIN LU_Month b on a.Day=b.Day
GROUP BY b.Month, Sales_ID, Sales_No
) a
JOIN
(
SELECT b.Month, Sales_ID, Sales_No, Sum(Collection) 'Collection'
FROM FT_Payment a
JOIN LU_Month b on a.Day=b.Day
GROUP BY b.Month, Sales_ID, Sales_No
) b on a.Sales_ID=b.Sales_ID AND a.Month=b.Month
WHERE a.Month=201607
차이점이 있다고 생각하지 않지만 다른 유형의 조인에서는 차이가 생길 수 있습니다. 예 : 왼쪽 조인의 하위 쿼리에있는 where 절은 다른 테이블의 모든 결과를 계속 표시하며 왼쪽 조인의 하위 쿼리 외부에있는 where 절은 근본적으로 내부 조인입니다. – ZLK
계획이 뭐라고 말합니까? –
SQL에서는 시스템에 * * 수행 방법이 아닌 * 원하는 것을 알려줍니다 *. 모든 것이 합리적으로 실행된다고 가정 할 때, 옵티마이 저는 * 동일한 * 논리적 * 결과를 요구하기 때문에 이들에 대한 동일한 계획을 생성해야합니다. –