Hi,
was verstehst du unter "Qualitaet" der Abfrage?
- Lesbarkeit / Verstaendlichkeit?
- effiziente Resourcennutzung und Geschwindigkeit
Mit einem Editor wirst du diese Abfrage nicht zusammenklicken koennen, da hat es FOR XML PATH drin.
zu 1) scheint mir auf den ersten Blick etwas ueberkandideltfuer die banale Anforderung
Letzten Endes geht es einfach nur darum zu ermitteln welche Naturparke in einer bestimmten Ergebnismenge auftauchen.
Geht es einfacher. Mit 50%iger Sicherheit, JA. Aber nur unter Kenntnis der zugrundeliegenden Datenstrukturen und der genaueren Anforderungen, wie das Ergebnis aussehen soll. Z.b. dieses Subselect mit den Bundeslaendern scheint mir ein Versuch einer GROUP_CONCAT Sache zu sein. FOR XML ist nich unbedingt der schnellste Operator in MS SQL Server.
zu 2) das kannst du herausfinden mit dem Ausfuehrungsplan (Execution Plan).
- wie hoch sind die Kosten (statement subtree cost), wird die Abfrage parallelisiert ausgefuerht
- gibt es irgendwo Table / Index Scans statt Seeks
- gibt es teure Sort Operationen, ineffiziente Nested-Loop-Joins (ect. nested loop scans die mehrere 1000x gemacht werden obwohl nur 100 Records rauskommen)
- gibt es grosse Diskrepanzen zwischen erwarteter Menge an Records und tatsaechlicher Menge
- gibt es irgendwo grosse (gekennzeichnet durch einen breiteren Pfeil) temporaere Zwischenmengen an Daten
- wie hoch ist die Kompilierzeit (SET STATISTICS TIME ON)
- wieviele logische / physikalische Lesevorgaenge auf den Daten werden gemacht (SET STATISTICS IO ON), gibt auch Auskunft ob temporaere Tabellen angelegt werden
- wie lange dauert die Ausfuehrung der Abfrage
- fehlen Indices auf den Tabellen
Sind die Kosten <=0.5 und die Ausfuerhungszeit bei <=200ms wuerd ich keine weiteren Untersuchungen anstellen.
Ciao, Frank