SQL Server 2008 R2를 사용하고 있습니다
방금 SQL에서 APPLY를 보았고 많은 경우 쿼리 문제를 해결하는 방법을 좋아했습니다.
결과를 얻기 위해 2 개의 왼쪽 조인을 사용하는 많은 테이블이 외부 적용 1 개를 얻을 수있었습니다.
로컬 DB 테이블에 소량의 데이터가 있으며 배포 후 코드가 최소 20 배 큰 데이터에서 실행되어야합니다.
외부 적용이 많은 양의 데이터에 대해 2 개의 왼쪽 조인 조건보다 오래 걸릴 수 있습니다.
누구든지 정확히 어떻게 적용하고 어떻게 큰 데이터에서 성능에 영향을 줄지 알 수 있습니까? 가능한 경우 각 테이블의 크기와 비례 관계는 n1 ^ 1 또는 n1 ^ 2에 비례합니다. 여기서 n1은 테이블의 행 수입니다. 1.
왼쪽 조인이 2 개인 쿼리는 다음과 같습니다.
select EC.*,DPD.* from Table1 eC left join
(
select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2
group by member_id,parent_gid,child_gid,LOB,group_gid
) DPD2 on DPD2.parent_gid = Ec.parent_gid
AND DPD2.child_gid = EC.child_gid
AND DPD2.member_id = EC.member_id
AND DPD2.LOB = EC.default_lob
AND DPD2.group_gid = EC.group_gid
left join
Table2 dpd on dpd.parent_gid = dpd2.parent_gid
and dpd.child_gid = dpd2.child_gid
and dpd.member_id = dpd2.member_id
and dpd.group_gid = dpd2.group_gid
and dpd.LOB = dpd2.LOB
and dpd.table2_sid = dpd2.mdsid
외부 적용을 사용하는 쿼리는 다음과 같습니다.
select * from Table1 ec
OUTER APPLY (
select top 1 grace_begin_date,retroactive_begin_date,Isretroactive
from Table2 DPD
where DPD.parent_gid = Ec.parent_gid
AND DPD.child_gid = EC.child_gid
AND DPD.member_id = EC.member_id
AND DPD.LOB = EC.default_lob
AND DPD.group_gid = EC.group_gid
order by DPD.table2_sid desc
) DPD