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