Mysql Nested Sets zu langsam

Daniel_CB

Aktives Mitglied
Hallo liebe Forengemeinde,

habe mal wieder ein Problem ich hab eine struktur in einer Datenbank abgelegt.

Die Tabellenstruktur sieht so aus


CREATE TABLE `kd_struktur` (
`id` int(10) NOT NULL,
`bon_lft` int(10) DEFAULT NULL,
`bon_rgt` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `bon_lft` (`bon_lft`),
KEY `bon_rgt` (`bon_rgt`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ICh habe eine abfrage die mir alles unter einem Teilbaum auslesen soll

SELECT p.id, COUNT( p.id ) -1 AS
LEVEL FROM kd_struktur AS n, kd_struktur AS p, kd_struktur AS o
WHERE o.bon_lft
BETWEEN p.bon_lft
AND p.bon_rgt
AND o.bon_lft
BETWEEN n.bon_lft
AND n.bon_rgt
AND n.id =2
GROUP BY o.bon_lft
ORDER BY o.bon_lft
LIMIT 0 , 100

und das Explain zeigt das (Screen im Anhang)

Ich hoffe Ihr könnt mir helfen. ich denke mal ich habe die indexe falsch gesetzt oder so...

MFG DANIEL Anhang anzeigen 2

 
Warum gestaltest Du die Abfrage so kompliziert, wenn sie nur über eine Tabelle geht?
Was soll die Abfrage eigentlich genau machen?

Die Indexe bringen auf jedenfall keinen Preformancegewinn, da alle Spalten einen Index besitzen.
 
Die abfrage Soll mir alle Kinder eines Menues auslesen und dazu noch die also Level.

Nested sets Verschachtelte Mengen

da hab ich den code her
smile.gif


gruss daniel
 
Das Modell was auf der Seite beschrieben wurde ist zwar innerhalb der Linearen Programmierung, wo man zb. nur einen Array mit einem einzigen Index als Datenquelle hat ganz gut, bei Datenbanksystemen habe ich das bisher aber noch nie angetroffen.

Besser du verwendest das umgänglichste Modell, wo jeder Eintrag zwei Indezes hat, einer ist die ID und einfach ein vortlaufender Zähler, und der zweite Index gibt an, wo sich der Eintrag in der Baumstruktur befindet. Genauergesagt ist es die Parent-ID die angibt unter welchen Element sich das neue Element unterordnet.

Bei dieser vorgehensweiße kommst du ohne Rechnerreien aus.
 
Jepp, das Arbeiten mit einer Parent-ID ist IMHO die beste Lösung eine Menüstruktur in einer Datenbank abzubilden.
 
Blos wie kann ich bei dem Parent child verfahren einigermaßen eine solch große Struktur Verwalten bis jetzt war das nested sets modell immer gut genug aber nun weis ich nicht weiter
sad.gif


Das problem ist solch ein baum kann ganz schnell 20 Ebenen und mehr haben.
 
Eigentlich sollten Nested Sets performanter sein als normale Parent-Verknüpfungen. In Deinem Artikel gibt es auch einen Bereich "Performance", der das eigentlich erklärt.

Hab mich damit bisher nicht so intensiv beschäftigt, aber bevor Du komplett auf das Parent-Modell "downgradest" würd ich evtl. noch ein wenig Fehleranalyse betreiben, vielleicht sind die Indizes falsch oder vielleicht ist Dein Rechner einfach nicht stark genug um die Datenmenge zu bewältigen ... oder oder oder.

Ist CODE (3) SELECT *,
ROUND((n.rgt-n.lft-1)/2) AS offspring
FROM tree
WHERE level = 1
ORDER BY root;
=> 0.001 sek.


Nicht genau das, was Du gesucht hast?
 
Zurück
Oben