Ich habe hierarchische Daten in einem geschachtelten Mengenmodell (Tabelle: Projekte):
Meine Tabelle (Projekte):
%Vor%Schön gedruckt:
%Vor%Um den nächsten Superknoten von Knoten 3 zu finden (dessen lft-Wert bekannt ist), kann ich
machen %Vor%Was mir eine Liste der Projekte im Pfad bis zum Knoten 3 gibt. Dann, indem ich MAX (projects.lft) der Ergebnisse gruppiere und finde, erhalte ich den nächsten Super-Knoten. Ich kann jedoch nicht scheinen, dass diese Abfrage schnell ausgeführt wird, sie verwendet nicht die Indizes, die ich definiert habe. EXPLAIN sagt:
%Vor%Mysql versteht, welcher Index verwendet werden soll, muss aber trotzdem alle 10 Zeilen (oder 100 k in meiner tatsächlichen Tabelle) durchlaufen.
Wie kann ich MySql dazu bringen, diese Abfrage richtig zu optimieren? Ich füge ein Testskript hinzu.
%Vor%Dies ist bei der Suche nach Hilfe zur Indizierung für verschachtelte Sätze aufgetreten.
Ich bin mit einer anderen Lösung gelandet, die sperrig ist, aber leicht vollständig indexiert werden kann. Es wird jedoch Updates noch langsamer machen. Allerdings poste ich es hier, da es anderen helfen könnte.
Wir haben eine Tabelle mit Produktkategorien, die Unterkategorien usw. haben können. Diese Daten sind ziemlich statisch.
Ich habe eine Tabelle eingerichtet, die die Beziehungen zwischen den Kategorien, die die Kategorie enthalten, und eine Zeile für jede übergeordnete Kategorie (einschließlich dieser bestimmten Kategorie) zwischenspeichert, zusammen mit dem Unterschied in der Tiefe.
Wenn eine Änderung an der tatsächlichen Kategorietabelle vorgenommen wird, trigger ich gerade eine Prozedur zum Neuerstellen der zwischengespeicherten Tabelle.
Dann kann alles, was nach der Eltern / Kind-Beziehung sucht, den Cache verwenden, um direkt zwischen einer Kategorie und allen ihren Kindern (oder einem Kind und allen Eltern) zu verlinken.
Die eigentliche Kategorietabelle.
%Vor%Die einfache Cache-Tabelle: -
%Vor%Die Prozedur: -
%Vor%Dies könnte wahrscheinlich nützlich verbessert werden, wenn die Tabelle groß und häufig aktualisiert wird.
Tags und Links sql mysql nested-sets