Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - Melhor método para lidar com esses dados hierárquicos?


Quassnoi executou alguns testes de desempenho no modelo de conjuntos aninhados e no modelo de lista de adjacências e documentou os resultados e recomendações em sua postagem no blog Lista de adjacências vs. conjuntos aninhados:MySQL . O sumário executivo é:
  • Os conjuntos aninhados são mais rápidos para buscar todos os nós filhos ou todos os nós pais.
  • Os conjuntos aninhados são uma má ideia se você precisar atualizar a tabela com frequência.

Aqui está a conclusão de seu artigo:

O restante do artigo mostra como definir a tabela, implementar as consultas e fornecer medições de desempenho. O uso do índice espacial é uma ideia inteligente para melhorar o desempenho do modelo de conjunto aninhado que pode ser novo para você.

Se você também está considerando abordagens sem MySQL, então você pode querer olhar para PostgreSQL que é outro banco de dados gratuito e de código aberto. O PostgreSQL suporta consultas recursivas na forma de expressões de tabelas comuns recursivas que tornam a consulta de dados hierárquicos mais fácil do que no MySQL e também oferecem melhor desempenho. Quassnoi também escreveu um artigo Lista de adjacência vs. conjuntos aninhados:PostgreSQL que mostra os detalhes.

Enquanto estamos falando sobre outras abordagens, o banco de dados da Oracle também merece uma menção. Oracle também tem uma extensão personalizada CONNECT BY o que torna a consulta de dados hierárquicos muito fácil e rápida. Artigo de Quassnoi Lista de adjacência vs. conjuntos aninhados:Oracle novamente cobre os detalhes de desempenho. A consulta que você precisa para obter todos os filhos é extremamente simples neste caso:
SELECT *
FROM yourtable
START WITH id = 42
CONNECT BY parent = PRIOR id