|
MyISAM e InnoDB sono due dei motori di archiviazione MySQL più famosi e utilizzati. Oggi parleremo della differenza tra MyISAM e InnoDB in MySQL e della scelta di ...
Che cos'è MyISAM?
MyISAM è il motore di archiviazione predefinito del sistema di gestione di database relazionali MySQL (prima della versione 5.5). Questa struttura di archiviazione delle tabelle di MySQL estende il vecchio codice ISAM con molte caratteristiche utili. Nelle versioni più recenti di MySQL, il motore InnoDB ha iniziato a sostituire ampiamente MyISAM grazie ai suoi vantaggi per le transazioni, l'integrità referenziale e una maggiore concorrenza. Ogni tabella MyISAM corrisponde a tre file sul disco rigido. Questi tre file hanno lo stesso nome, ma estensioni diverse che ne indicano il tipo di utilizzo: il file .frm contiene la definizione della tabella, ma questo file non fa parte del motore MyISAM, bensì del server; .MYD contiene i dati della tabella e .MYI è il file di indice della tabella.
Che cos'è InnoDB?
InnoDB è un altro motore di archiviazione di MySQL, che attualmente è lo standard per le nuove versioni di MySQL AB, è incluso in tutte le installazioni binarie ed è il motore di archiviazione predefinito dopo la versione 5.5. I suoi vantaggi rispetto agli altri motori di archiviazione sono il supporto delle transazioni ACID-compliant (simile a PostgreSQL) e l'integrità dei parametri (cioè il supporto delle chiavi esterne).
Oracle Corporation ha acquisito Innobase nell'ottobre 2005. Innobase utilizza una licenza a doppia autenticazione. È distribuito sotto la distribuzione GNU, che consente anche ad altri gruppi che vogliono incorporare InnoDB in software commerciali di ottenere una licenza.
Le differenze principali tra MyISAM e InnoDB riguardano le prestazioni e il controllo delle transazioni. myISAM è un'implementazione estesa del precedente ISAM (Indexed Sequential Access Method, non più supportato da MySQL dopo la versione 5.0). ISAM è stato progettato per essere adatto a gestire la frequenza di lettura è molto maggiore della frequenza di scrittura tale situazione, quindi ISAM e successivamente MyISAM non sono considerati per supportare le cose, escluso il TPM, non hanno bisogno di record di transazione, l'efficienza di query ISAM è notevole, e molto poco consumo di memoria. MyISAM ha ereditato tali vantaggi, avanzando al contempo con i tempi per fornire un gran numero di nuove funzionalità pratiche e strumenti correlati. Ad esempio, per quanto riguarda il controllo della concorrenza, sono previsti lock a livello di tabella e, sebbene MyISAM stesso non supporti la tolleranza ai guasti, il ripristino dei guasti può essere eseguito tramite myisamchk. Inoltre, poiché MyISAM utilizza per ogni tabella i propri file di archiviazione indipendenti (file di dati MYD e file di indici MYI), il backup e il ripristino sono molto convenienti (è possibile copiare e sovrascrivere), ma supporta anche il ripristino online. Rispetto ad altri motori di memorizzazione, MyISAM dispone della maggior parte degli strumenti per il controllo e la riparazione delle tabelle. Le tabelle di MyISAM possono essere compresse e supportano la ricerca full-text. Non sono sicure dal punto di vista delle transazioni e non supportano le chiavi esterne, quindi se la vostra applicazione non è transazionale e si occupa solo di operazioni CRUD di base, MyISAM è la scelta giusta. InnoDB è progettato per letture e scritture altamente simultanee, utilizzando MVCC (Multi-Version Concurrency Control) e il blocco a livello di riga per fornire un supporto alle transazioni conforme ad ACID. InnoDB supporta l'integrità referenziale delle chiavi esterne, con funzionalità di failback. Inoltre, le prestazioni di InnoDB sono effettivamente buone, soprattutto nel caso di elaborazione di grandi quantità di dati, con le parole ufficiali: l'efficienza della CPU di InnoDB non può essere paragonata a quella di altri motori di archiviazione di database relazionali basati su disco. Tuttavia, il recupero di backup InnoDB a problemi un po ', a meno che non si utilizza il 4.1 o versione successiva del supporto Mulit-tablespace, perché InnoDB e MyISAM è diverso, i suoi file di dati non sono indipendentemente corrispondenti a ciascuna tabella. Utilizza invece un tablespace condiviso e il semplice metodo di copia e sovrascrittura non è applicabile e i dati devono essere recuperati dopo l'arresto di MYSQL. L'uso di Tablespacesd per tabella, che ha un file tablespace separato per ogni tabella, è molto più semplice. Le tabelle InnoDB sono molto veloci e hanno un insieme di caratteristiche più ricco rispetto a BDB, quindi se si ha bisogno di un motore di archiviazione sicuro per le transazioni, è consigliabile utilizzarlo.
In generale, se avete bisogno del supporto alle transazioni e avete un'alta frequenza di lettura e scrittura simultanea, InnoDB è una buona scelta. Se non si ha un'alta frequenza di lettura/scrittura, si può prendere in considerazione BDB, ma poiché il supporto BDB non sarà più disponibile in MySQL 5.1 e successivi, questa opzione non è più disponibile. Questa opzione non è più disponibile.
InnoDB ha le transazioni attivate per impostazione predefinita (impostare autocommit = 0), il che significa che ogni volta che viene inserito un record, la tabella di tipo InnoDB lo tratta come una transazione separata. Quindi, se abbiamo inserito 10.000 record e non abbiamo chiuso la transazione, la tabella di tipo InnoDB la tratterà come 10.000 transazioni per gestire il tempo totale di inserimento è un sacco di questo tempo deve prima spegnere la transazione e poi inserito, in modo che la velocità della velocità della Come per l'Heap e BDB (Berkeley DB), in termini comparativi, la popolarità del meno di Per quanto riguarda Heap e BDB (Berkeley DB), in termini relativi, la popolarità non è così buona come i primi due, ma in alcuni casi, è ancora abbastanza applicabile Il motore di archiviazione Heap è quello di memorizzare i dati in memoria, perché non c'è attesa per il disco I / O, la velocità è estremamente veloce. Tuttavia, trattandosi di un motore di memorizzazione in-memory, le modifiche apportate andranno perse dopo il riavvio del server.Heap è ottimo per scopi di test.BDB è il primo motore di memorizzazione transaction-safe per MySQL. Costruito sulla libreria di database Berkeley DB, è anch'esso sicuro dal punto di vista transazionale, ma BDB è chiaramente meno popolare di InnoDB perché la maggior parte delle persone che cercano un motore di archiviazione transazionale in MySQL cercano anche un motore di archiviazione che supporti MVCC o il blocco a livello di riga, mentre BDB supporta solo il blocco a livello di pagina.
Motore InnoDB
InnoDB è un motore di archiviazione transazionale che supporta il rollback ed è progettato per fornire prestazioni elevate quando si tratta di grandi quantità di dati. Crea pool di buffer in memoria in fase di esecuzione per bufferizzare dati e indici.
Vantaggi del motore InnoDB
1, supporto per l'elaborazione delle transazioni, caratteristiche delle transazioni ACID;
2, implementazione dei quattro livelli di isolamento dello standard SQL;
3, supporto per lock a livello di riga e vincoli di chiave esterna;
4, possibilità di utilizzare il log delle transazioni per il recupero dei dati.
5, il livello di lock per i lock di riga, il vantaggio dei lock di riga è applicabile alle modifiche frequenti delle tabelle ad alta concorrenza, l'alta concorrenza è migliore delle prestazioni di MyISAM. lo svantaggio è che il sistema consuma di più.
6, l'indice non solo si memorizza nella cache, ma anche nella cache dei dati, rispetto a MyISAM richiede più memoria. Svantaggi del motore InnoDB
Poiché non salva il numero di righe della tabella, quando si usano le statistiche COUNT si scansiona l'intera tabella.
Motore MyISAM
MyISAM è il motore predefinito in MySQL prima della versione 5.5.5 ed è progettato per letture veloci.
Vantaggi del motore MyISAM
1. Letture ad alte prestazioni;
2. Poiché memorizza il numero di righe nella tabella, l'intera tabella non viene scansionata quando si utilizzano le statistiche COUNT; Svantaggi del motore MyISAM
1. livello di lock per i lock delle tabelle, i vantaggi dei lock delle tabelle sono il basso overhead e la velocità di lock; gli svantaggi sono la granularità dei lock, la probabilità che si verifichino impulsi di lock è più alta, la capacità di gestire la concorrenza è bassa, questo motore è adatto per le attività basate sulle query.
2, questo motore non supporta le transazioni, non supporta le chiavi esterne.
3, le operazioni di INSERT e UPDATE devono bloccare l'intera tabella;
4, memorizza il numero di righe della tabella, quindi SELECT COUNT(*) FROM TABLE deve solo leggere direttamente il valore salvato, senza la necessità di una scansione completa della tabella. Scenari applicabili
MyISAM è adatto per: (1) eseguire molti calcoli di conteggio; (2) inserimenti poco frequenti e query molto frequenti; (3) nessuna transazione.
InnoDB è adatto per: (1) requisiti di affidabilità più elevati o per richiedere transazioni; (2) gli aggiornamenti delle tabelle e le query sono abbastanza frequenti e l'opportunità di bloccare le tabelle è relativamente grande.
Tabella a confronto
Attributi | MyISAM | Heap | BDB | InnoDB | Transazione | Non supportato | Non supportato | Supportato | Supportato | Granularità del blocco | Blocchi di tabella | Blocco della tabella | Blocco di pagina (pagina, 8KB) | Blocco di riga | Memorizzazione | File diviso | In memoria | Un file per tabella | Spazio tabellare | Livello di isolamento | Nessuno | Nessuno | Lettura impegnata | Tutti | Formato portatile | Formato portatile | N/D | No | No | Integrità referenziale | No | No | No | No | Dati Chiave primaria | No | No | No | No | Record di dati in cache MySQL | No | Si | Si | Sì | Disponibilità | Versione completa | Versione completa | MySQL-Max | Versione completa |
Alcune differenze dettagliate
1. InnoDB non supporta gli indici di tipo FULLTEXT, supportati da MySQL dopo la versione 5.6 (sperimentale).
2. InnoDB non salva il numero di righe di una tabella, cioè quando si esegue select count() da una tabella, InnoDB deve scansionare l'intera tabella per calcolare quante righe ci sono, mentre MyISAM legge semplicemente il numero di righe che sono state salvate. Si noti che quando l'istruzione count() include la condizione where, le due operazioni sulle tabelle sono identiche.
3, per i campi di tipo AUTO_INCREMENT, InnoDB deve contenere solo l'indice del campo, ma nella tabella MyISAM è possibile costruire un indice congiunto con altri campi.
4, DELETE FROM table, InnoDB non ristabilirà la tabella, ma la cancellerà riga per riga.
5, l'operazione LOAD TABLE FROM MASTER non funziona per InnoDB, la soluzione è quella di cambiare prima la tabella InnoDB in una tabella MyISAM, importare i dati e poi passare alla tabella InnoDB, ma per l'uso di ulteriori funzioni InnoDB (come le chiavi esterne) della tabella non si applica.
6, Inoltre, il blocco delle righe della tabella InnoDB non è assoluto, se nell'esecuzione di un'istruzione SQL MySQL non riesce a determinare l'ambito della scansione, la tabella InnoDB bloccherà anche l'intera tabella.
7, InnoDB non supporta l'indicizzazione full-text, mentre MyISAM la supporta. L'indice full-text si riferisce ai caratteri char, varchar e text di ogni parola (eccetto le parole disattivate) per stabilire l'indice invertito. L'indice full-text di MyISAM non è utile, perché non supporta la parola cinese, deve essere aggiunta dall'utente nello spazio vuoto e poi scritta nella tabella dati, e meno di 4 caratteri cinesi saranno ignorati e le parole disattivate come la stessa parola.
|
Precedente: Domande di laboratorio sull'assemblaggioSuccessivo: Dichiarazione sql in tipo int a varchar
|