KlausStein: Query optimieren / mysql 5

Beitrag lesen

das Ergebnis habe ich in etwa erwartet.

payload  lft    rgt
4303 1318 1319
5290 1318 1319

Hallo Vinzenz,

möglicherweise Fehlalarm, denn weißt Du, was wir vergessen haben?

SELECT node.payload FROM 000node parent INNER JOIN 000node node ON node.lft BETWEEN parent.lft AND parent.rgt WHERE parent.payload = 4303 ORDER BY node.lft

Die Query berücksichtigt nicht, dass ich jedes Jahr neu anfange, in der node-tabelle hochzuzählen.

Verschaffe Dir einen schnellen Überblick, ob dieses Problem mehrfach vorliegt:

-- suche lft-Werte, die mehrfach auftreten - was ja ein Fehler ist.
SELECT
    COUNT(lft)
FROM
    000node
HAVING COUNT(lft) > 1


>   
  
  
Sorry, aber bei dieser Query verstehe ich einfach das Ergebnis nicht. Als Ergebnis bekomme ich die Anzahl der gesamten Einträge in der node-tabelle (2357).  
  
Aber auch diese Query berücksichtigt nicht, dass ich über die root\_id das Jahr mitführe und jährlich neu hochzähle.  
  
Insofern dürfte aber auch Deine Lösung ein paar Posts zuvor schon korrekt gewesen sein, denn das Doppelergebnis mit dem falschen Knoten wird zum Einfachergebnis mit korrektem Knoten, wenn ich eine where-Klausel mit Bezug auf die root\_id anfüge.  
  
  
Nun mal was ganz anderes. Ich mag das Nested Set nicht, weil ich die Tabelle nicht mehr vernünftig lesen kann. Dazu kommt in meinen Ausführungen das von Dir erwähnte Time-of-check-to-time-of-use-Problem. Weiterhin scheint in meiner Lösung der Jahreswechsel auch in der Ausgabe des Baumes ja nciht ganz ohne zu sein.  
  
Ich habe das gestern mal schnel, auf meine Redundanz überschrieben und stelle fest, dass ich noch nie über 6-8 Knoten für einen payload gekommen bin. Meist sind es sogar nur 1-3 Knoten (Parent und Child zusammengezählt).  
  
Und ich benötige nie den gesamten Baum, ich benötige immer nur den Parent-Cild-Baum von einem bestimmten Payload.  
  
Ist da für mich nicht sogar die alte, rekursive Ausles-Lösung in Summe (ich könnte ja die ganze Nested Set Insert und Update-Geschichte herausnehmen)gesehen performanter als das Nested Set? Und wegen o.g. Mängel auch die sinnvollere Lösung?  
  
Grüße, KlausStein