sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Bästa metoden att hantera denna hierarkiska data?

Quassnoi har kört några prestandatester på modellen för kapslade uppsättningar och modellen för adjacency list och dokumenterat resultaten och rekommendationerna i sitt blogginlägg Adjacency-list vs. kapslade uppsättningar:MySQL . Sammanfattningen är:

  • Inkapslade uppsättningar är snabbare för att hämta alla underordnade noder eller alla överordnade noder.
  • Inkapslade uppsättningar är en dålig idé om du ofta behöver uppdatera tabellen.

Här är slutsatsen från hans artikel:

Resten av artikeln visar hur man definierar tabellen, implementerar frågorna och ger resultatmätningar. Användningen av det rumsliga indexet är en smart idé för att förbättra prestandan för den kapslade uppsättningsmodellen som kan vara ny för dig.

Om du också överväger tillvägagångssätt utan MySQL så kanske du vill titta på PostgreSQL som är en annan gratis och öppen källkodsdatabas. PostgreSQL stöder rekursiva frågor i form av rekursiva vanliga tabelluttryck vilket gör det enklare att söka efter arvsdata än i MySQL och även ger bättre prestanda. Quassnoi har också skrivit en artikel Adjacency list vs. kapslade uppsättningar:PostgreSQL som visar detaljerna.

Medan vi pratar om att titta på andra tillvägagångssätt är Oracles databas också värd att nämna. Oracle har också ett anpassat tillägg CONNECT BY vilket gör det mycket enkelt och snabbt att söka efter arvsdata. Quassnois artikel Adjacency list vs. Nested sets:Oracle återigen täcker prestandadetaljerna. Frågan du behöver för att få alla barn är extremt enkel i det här fallet:

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


  1. Php mysql för att göra uppgiften efter 30 sekunder

  2. Hur man ersätter en Intermediate MySQL eller MariaDB Master med en Binlog Server med MaxScale

  3. MySQL:Hur hämtar man en slumpmässig rad eller flera slumpmässiga rader?

  4. Infoga flera e-postmeddelanden till mysql med ett enda textområde