Ich verwende SQL Server 2008 R2
Ich bin gerade auf APPLY in SQL gestoßen und fand es toll, wie es Abfrageprobleme in so vielen Fällen löst.
Viele der Tabellen, für die ich 2 Links-Joins verwendet habe, um das Ergebnis zu erhalten, konnten in 1 Outer-Apply-Tabelle verwendet werden.
Ich habe eine kleine Datenmenge in meinen lokalen DB-Tabellen und nach der Bereitstellung soll der Code auf Daten ausgeführt werden, die mindestens 20-mal so groß sind.
Ich befürchte, dass die äußere Anwendung für große Datenmengen länger dauern könnte als die beiden Bedingungen für Links-Joins.
Kann jemand sagen, wie genau gelten funktioniert und wie es die Leistung in sehr großen Daten auswirkt, wenn möglich einige proportionale Beziehungen mit der Größe jeder Tabelle wie proportional zu n1 ^ 1 oder n1 ^ 2 ... wobei n1 die Anzahl der Zeilen in der Tabelle ist 1.
Hier ist die Abfrage mit 2 Links Join
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
Hier ist die Abfrage mit Outer Apply
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