Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - La meilleure méthode pour gérer ces données hiérarchiques ?

Quassnoi a effectué des tests de performance sur le modèle d'ensembles imbriqués et le modèle de liste de contiguïté et a documenté les résultats et les recommandations dans son article de blog Liste d'adjacence vs ensembles imbriqués :MySQL . Le résumé analytique est :

  • Les ensembles imbriqués sont plus rapides pour récupérer tous les nœuds enfants ou tous les nœuds parents.
  • Les ensembles imbriqués sont une mauvaise idée si vous devez fréquemment mettre à jour le tableau.

Voici la conclusion de son article :

Le reste de l'article montre comment définir la table, implémenter les requêtes et donne des mesures de performances. L'utilisation de l'index spatial est une idée astucieuse pour améliorer les performances du modèle d'ensemble imbriqué qui pourrait être nouveau pour vous.

Si vous envisagez également des approches sans MySQL, vous voudrez peut-être consulter PostgreSQL qui est une autre base de données gratuite et open-source. PostgreSQL prend en charge les requêtes récursives sous la forme d'expressions de table communes récursives qui rendent l'interrogation des données hiérarchiques plus facile que dans MySQL et offrent également de meilleures performances. Quassnoi a également écrit un article Adjacency list vs. ensembles imbriqués :PostgreSQL qui affiche les détails.

Alors que nous parlons d'examiner d'autres approches, la base de données d'Oracle mérite également une mention. Oracle a également une extension personnalisée CONNECT BY qui rendent l'interrogation des données hiérarchiques très simple et rapide. Article de Quassnoi Liste d'adjacence vs ensembles imbriqués :Oracle couvre à nouveau les détails de la performance. La requête dont vous avez besoin pour obtenir tous les enfants est extrêmement simple dans ce cas :

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