Welche Parent-Exist-Abfrage ist performanter/besser???

23/02/2008 - 18:15 von Andy Dorwald | Report spam
Hallo NG,

um in einer hierarischen Datenablage herauszufinden, ob es zu einem Knoten
auch "Kinder" gibt, hatte ich bisher folgendes Statement eingesetzt:

SELECT DISTINCT Tabl.*,CONVERT(BIT,Kinder.NodeTyp) AS Kind FROM Tabl LEFT
JOIN Tabl AS Kinder ON Tabl.ID = Kinder.ParentID

...dabei gilt, wenn Kind NOT NULL, dann existieren welche!

Jetzt habe ich einen anderen Weg (mit einem Subselect!) herausgefunden und
bin mir unsicher, ob dieser vielleicht doch der bessere ist, da ich mit das
Ergebnis des "Ausführungsplans" nicht richtig deuten kann:

SELECT *, (SELECT TOP 1 NodeTyp FROM Tabl AS T WHERE T.ParentID=Tabl.ID) AS
Kind FROM Tabl

...dabei gilt, wenn Kind NOT NULL, dann existieren welche!

Frage1: Könnte mir jemand sagen, ob der Weg über ein Subselect
besser/performanter ist?
Frage2: Kennt Ihr ggf. noch einen weiteren, noch besseren Weg?
Frage3: Vielleicht sogar noch einen Tipp, wie man so einen Ausführungsplan
deutet?

Hier das Ergebnis des Query-Ausführungsplans:

Variante1:
1. Sort/Distinct Sort Kosten: 20%
2. Nested Loops/Left Outer Join Kosten:: 20%
3. Tabl.ixParent Kosten: 60%

Variante2:
1. Bookmark Lookup Kosten: 25%
2. Tabl.ixParent Kosten: 75%

VG
Andy
 

Lesen sie die antworten

#1 Ingo Moch
23/02/2008 - 22:39 | Warnen spam
Hallo Andy,

"Andy Dorwald" schrieb:

um in einer hierarischen Datenablage herauszufinden,
ob es zu einem Knoten auch "Kinder" gibt, hatte ich
bisher folgendes Statement eingesetzt:

[...]

Jetzt habe ich einen anderen Weg (mit einem
Subselect!) herausgefunden und bin mir unsicher, ob
dieser vielleicht doch der bessere ist,



Ich kenne so etwas unter dem Begriff "Baum". Wird
unter folgendem Link eigentlich recht ausfuehrlich
dargestellt:
http://kris.koehntopp.de/artikel/sq...eferences/

Ingo

Ähnliche fragen