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

MySQL:il metodo migliore per gestire questi dati gerarchici?

Quassnoi ha eseguito alcuni test delle prestazioni sul modello degli insiemi nidificati e sul modello dell'elenco di adiacenza e ha documentato i risultati e le raccomandazioni nel suo post sul blog Elenco di adiacenza e set nidificati:MySQL . Il riepilogo esecutivo è:

  • I set nidificati sono più veloci per recuperare tutti i nodi figlio o tutti i nodi padre.
  • I set nidificati sono una cattiva idea se devi aggiornare frequentemente la tabella.

Ecco la conclusione del suo articolo:

Il resto dell'articolo mostra come definire la tabella, implementare le query e fornisce misurazioni delle prestazioni. L'uso dell'indice spaziale è un'idea intelligente per migliorare le prestazioni del modello di set nidificato che potrebbe essere nuovo per te.

Se stai considerando anche approcci senza MySQL, potresti voler dare un'occhiata a PostgreSQL che è un altro database gratuito e open source. PostgreSQL supporta query ricorsive sotto forma di espressioni di tabelle comuni ricorsive che semplificano l'interrogazione dei dati gerarchici rispetto a MySQL e offrono anche prestazioni migliori. Quassnoi ha anche scritto un articolo Lista di adiacenza vs. insiemi annidati:PostgreSQL che mostra i dettagli.

Mentre stiamo parlando di esaminare altri approcci, vale la pena menzionare anche il database di Oracle. Oracle ha anche un'estensione personalizzata CONNECT BY che rendono l'interrogazione dei dati gerarchici molto facile e veloce. Articolo di Quassnoi Elenco di adiacenza vs. set nidificati:Oracle copre di nuovo i dettagli delle prestazioni. La query di cui hai bisogno per ottenere tutti i bambini è estremamente semplice in questo caso:

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