dedlfix: Query optimieren / mysql 5

Beitrag lesen

Hi!

SELECT s.payload, m.spalte5,m.spalte6

FROM 000node v, 000node s, 000node s_id, threads m
WHERE s.lft BETWEEN v.lft AND v.rgt
AND s.payload = m.ID
AND m.delete != 1
AND s.root_id =  "2010"
AND s_id.payload = "5895"
AND s.lft BETWEEN s_id.lft AND s_id.rgt
GROUP BY s.lft


>   
> das ist eine fehlerhafte abfrage, die nur mysql verarbeiten würde. jedes andere dbms würde eine fehlermeldung ausgeben.  
  
Das würde ich jetzt mal nicht als das Hauptproblem ansehen.  
  

> des weiteren benutzt du die implizite join schreibweise, benutze immer die explizite. es gibt keinen vernüftigen grund sie nicht zu benutzen.  
  
Eher verwundert mich, dass er nur eine Join-Bedingung aber vier Tabellen/Aliase hat. Oder zählen die beiden BETWEEN-Bedingunen zu den JOIN-Bedingungen und nicht zu den datensatzeinschränkenden? Das Hauptproblem ist ja, dass er hier wohl irgendwelche riesigen kartesischen Produkte bekommt, weil er nicht richtig verknüpft und/oder einschränkt.  
  

> auch namen wir "lft" sind wenig aussagekräftig.  
  
Im Kontext Nested Sets ist das schon ausreichend. Ich würde das sogar auf L und R beschränken. Und wenn du so willst, wären die Aliasnamen ja auch nicht aussagekräftig. Aber das ist auch ein unwichtiger Nebenkriegsschauplatz.  
  

> zu guter letzt eine frage,handelt es sich hier um tabellen "000node" oder um views ?  
  
Wofür ist diese Unterscheidung wichtig? Meinst du, wenn es eine View ist, dass die vielleicht selbst durch einen Join eine Menge Daten generiert, und man auch noch die Definition der View kennen muss?  
  
Wie wäre es noch mit der Frage, was für eine Aufgabenstellung zu diesem Lösungsversuch geführt hat. Denn ohne die zu kennen, wird man eher schwer zu einer richtigen Lösung kommen.  
  
  
Lo!