Dynamics Technical Airlift – Das SQL-Statement hinter der Query

Während meines Vortrages habe ich ein SQL-Statement gezeigt, welches mit dem SQL-Profiler während der Laufzeit einer Query aufgezeichnet wurde.

Hierbei handelt es sich um eine Query, welche das selbe Ergebnis liefert wie der TOP-10-Debitoren-Report. Die Query benötigt gerade in großen Datenbank merklich weniger Zeit.

Hier noch einmal das SQL-Statement zum nachlesen:

SELECT TOP (10) ISNULL(“Customer”.”No_”,@0) AS “No”,ISNULL(“Customer”.”Name”,@1) AS “Name”,ISNULL(SUM(“SUB$Customer$Sales (LCY)“.”Sales (LCY)$Cust_ Ledger Entry$SUM$Sales (LCY)”),@3) AS “Sum_Sales_LCY”,ISNULL(SUM(“SUB$Customer$Balance (LCY)“.”Balance (LCY)$Detailed Cust_ Ledg_ Entry$SUM$Amount (LCY)”),@5) AS “Sum_Balance_LCY” FROM “Demo Database NAV (7-0)”.”dbo”.”CRONUS AG$Customer” AS “Customer” WITH(READUNCOMMITTED)

OUTER APPLY (SELECT TOP (1) ISNULL(SUM(“Sales (LCY)$Cust_ Ledger Entry”.”Sales (LCY)”),@2) AS “Sales (LCY)$Cust_ Ledger Entry$SUM$Sales (LCY)” FROM “Demo Database NAV (7-0)”.”dbo”.”CRONUS AG$Cust_ Ledger Entry” AS “Sales (LCY)$Cust_ Ledger Entry” WITH(READUNCOMMITTED)  WHERE (“Sales (LCY)$Cust_ Ledger Entry”.”Customer No_”=”Customer”.”No_”)) AS “SUB$Customer$Sales (LCY)

OUTER APPLY (SELECT TOP (1) ISNULL(SUM(“Balance (LCY)$Detailed Cust_ Ledg_ Entry”.”Amount (LCY)”),@4) AS “Balance (LCY)$Detailed Cust_ Ledg_ Entry$SUM$Amount (LCY)” FROM “Demo Database NAV (7-0)”.”dbo”.”CRONUS AG$Detailed Cust_ Ledg_ Entry” AS “Balance (LCY)$Detailed Cust_ Ledg_ Entry” WITH(READUNCOMMITTED)  WHERE (“Balance (LCY)$Detailed Cust_ Ledg_ Entry”.”Customer No_”=”Customer”.”No_”)) AS “SUB$Customer$Balance (LCY)

ORDER BY “Sales_LCY” DESC,”No” ASC OPTION(OPTIMIZE FOR UNKNOWN, FAST 50, FORCE ORDER, LOOP JOIN)

Dies ist auch ein schönes Beispiel wie die Query im Hintergrund mit verschachtelten Abfragen, der TOP-Klausel und den SQL eigenen Funktionen wie SUM arbeitet.