sql >> Database teknologi >  >> RDS >> Mysql

MySQL - Bedste metode til at håndtere disse hierarkiske data?

Quassnoi har kørt nogle præstationstests på Nested Sets-modellen og Adjacency List-modellen og dokumenteret resultaterne og anbefalingerne i sit blogindlæg Adjacency-list vs. indlejrede sæt:MySQL . Resuméet er:

  • Indlejrede sæt er hurtigere til at hente alle underordnede noder eller alle overordnede noder.
  • Indlejrede sæt er en dårlig idé, hvis du ofte har brug for at opdatere tabellen.

Her er konklusionen fra hans artikel:

Resten af ​​artiklen viser, hvordan man definerer tabellen, implementerer forespørgslerne og giver ydeevnemålinger. Brugen af ​​det rumlige indeks er en smart idé til at forbedre ydeevnen af ​​den indlejrede sætmodel, som måske er ny for dig.

Hvis du også overvejer tilgange uden MySQL, vil du måske se på PostgreSQL som er en anden gratis og open source-database. PostgreSQL understøtter rekursive forespørgsler i form af rekursive almindelige tabeludtryk som gør forespørgsel efter arvelige data nemmere end i MySQL og giver også bedre ydeevne. Quassnoi har også skrevet en artikel Adjacency list vs. indlejrede sæt:PostgreSQL der viser detaljerne.

Mens vi taler om at se på andre tilgange, er Oracles database også værd at nævne. Oracle har også en tilpasset udvidelse CONNECT BY som gør forespørgsel efter arvelige data meget nemt og hurtigt. Quassnois artikel Adjacency liste vs. indlejrede sæt:Oracle igen dækker ydelsesdetaljerne. Den forespørgsel, du skal bruge for at få alle børn, er ekstremt enkel i dette tilfælde:

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


  1. Forskellen mellem JOIN og INNER JOIN

  2. Sådan rettes "Partitionsskemaet '...' har ikke nogen næste brugt filgruppe" i SQL Server

  3. hvordan man genopretter standby-database fra en manglende arkivlog

  4. Returner en liste over partitionsfunktioner i SQL Server (T-SQL)