sql >> Database >  >> RDS >> Mysql

MySQL - De beste methode om met deze hiërarchische gegevens om te gaan?

Quassnoi heeft enkele prestatietests uitgevoerd op het geneste sets-model en het aangrenzende lijstmodel en de resultaten en aanbevelingen gedocumenteerd in zijn blogpost Aangrenzende lijst versus geneste sets:MySQL . De samenvatting is:

  • Geneste sets zijn sneller voor het ophalen van alle onderliggende knooppunten of alle bovenliggende knooppunten.
  • Nested sets is een slecht idee als je de tabel vaak moet bijwerken.

Hier is de conclusie uit zijn artikel:

De rest van het artikel laat zien hoe u de tabel definieert, de query's implementeert en prestatiemetingen geeft. Het gebruik van de ruimtelijke index is een slim idee om de prestaties te verbeteren van het geneste setmodel dat misschien nieuw voor u is.

Als u ook benaderingen zonder MySQL overweegt, kunt u misschien eens kijken naar PostgreSQL dat is een andere gratis en open-source database. PostgreSQL ondersteunt recursieve zoekopdrachten in de vorm van recursieve algemene tabeluitdrukkingen die het opvragen van hiërarchische gegevens eenvoudiger maken dan in MySQL en ook betere prestaties leveren. Quassnoi heeft ook een artikel geschreven Aangrenzende lijst vs. geneste sets:PostgreSQL die de details toont.

Terwijl we het hebben over het kijken naar andere benaderingen, is de database van Oracle ook het vermelden waard. Oracle heeft ook een aangepaste extensie CONNECT BY die het opvragen van hiërarchische gegevens zeer eenvoudig en snel maken. Quassnoi's artikel Aangrenzende lijst versus geneste sets:Oracle omvat opnieuw de prestatiedetails. De vraag die u nodig heeft om alle kinderen te krijgen, is in dit geval uiterst eenvoudig:

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


  1. SUBSTRING() gebruiken in MySQL

  2. Wat betekent select count(1) from table_name op databasetabellen?

  3. ORDER_BY datum LIMIT 1

  4. INSERT INTO met SubQuery MySQL