Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Beste Methode zum Umgang mit diesen hierarchischen Daten?

Quassnoi hat einige Leistungstests mit dem Nested-Sets-Modell und dem Adjacency-List-Modell durchgeführt und die Ergebnisse und Empfehlungen in seinem Blog-Beitrag Adjazenzliste vs. verschachtelte Mengen:MySQL . Die Zusammenfassung lautet:

  • Verschachtelte Sätze sind schneller zum Abrufen aller untergeordneten Knoten oder aller übergeordneten Knoten.
  • Verschachtelte Mengen sind eine schlechte Idee, wenn Sie die Tabelle häufig aktualisieren müssen.

Hier ist die Schlussfolgerung aus seinem Artikel:

Der Rest des Artikels zeigt, wie Sie die Tabelle definieren, die Abfragen implementieren und Leistungsmessungen durchführen. Die Verwendung des räumlichen Index ist eine clevere Idee, um die Leistung des verschachtelten Mengenmodells zu verbessern, das für Sie neu sein könnte.

Wenn Sie auch Ansätze ohne MySQL in Betracht ziehen, sollten Sie sich PostgreSQL ansehen Dies ist eine weitere kostenlose Open-Source-Datenbank. PostgreSQL unterstützt rekursive Abfragen in Form von rekursiven allgemeinen Tabellenausdrücken die das Abfragen hierarchischer Daten einfacher als in MySQL machen und auch eine bessere Leistung bieten. Quassnoi hat auch einen Artikel Adjacency list vs. verschachtelte Sätze:PostgreSQL das zeigt die Details.

Während wir über die Betrachtung anderer Ansätze sprechen, ist auch die Datenbank von Oracle erwähnenswert. Oracle hat auch eine benutzerdefinierte Erweiterung CONNECT BY die das Abfragen hierarchischer Daten sehr einfach und schnell machen. Quassnois Artikel Adjacency list vs. nested sets:Oracle behandelt erneut die Leistungsdetails. Die Abfrage, die Sie benötigen, um alle untergeordneten Elemente zu erhalten, ist in diesem Fall extrem einfach:

SELECT *
FROM yourtable
START WITH id = 42
CONNECT BY parent = PRIOR id