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

Qual è la differenza tra MyISAM e InnoDB?

Le principali differenze tra InnoDB e MyISAM ("rispetto alla progettazione di una tabella o di un database" di cui hai chiesto) sono il supporto per "integrità referenziale" e "transazioni".

Se è necessario il database per applicare i vincoli di chiave esterna o se è necessario che il database supporti le transazioni (ovvero le modifiche apportate da due o più operazioni DML gestite come una singola unità di lavoro, con tutte le modifiche applicate o tutte le modifiche ripristinate) quindi sceglieresti il ​​motore InnoDB, poiché queste funzionalità sono assenti dal motore MyISAM.

Queste sono le due maggiori differenze. Un'altra grande differenza è la concorrenza. Con MyISAM, un'istruzione DML otterrà un blocco esclusivo sulla tabella e, mentre tale blocco viene mantenuto, nessun'altra sessione può eseguire un'operazione SELECT o DML sulla tabella.

Quei due motori specifici di cui hai chiesto (InnoDB e MyISAM) hanno obiettivi di progettazione diversi. MySQL ha anche altri motori di archiviazione, con i propri obiettivi di progettazione.

Quindi, nella scelta tra InnoDB e MyISAM, il primo passo è determinare se sono necessarie le funzionalità fornite da InnoDB. In caso contrario, MyISAM è in considerazione.

Una discussione più dettagliata delle differenze è piuttosto impraticabile (in questo forum) in assenza di una discussione più dettagliata sullo spazio del problema... come l'applicazione utilizzerà il database, quante tabelle, la dimensione delle tabelle, il carico di transazione, i volumi di select , inserimento, aggiornamenti, requisiti di concorrenza, funzionalità di replica, ecc.

La progettazione logica del database dovrebbe essere incentrata sull'analisi dei dati e sui requisiti degli utenti; la scelta di utilizzare un database relazionale sarebbe arrivata in seguito, e anche in seguito sarebbe stata la scelta di MySQL come sistema di gestione di database relazionali, e quindi la scelta di un motore di archiviazione per ogni tabella.