Cosa c'è InnoDB
e MyISAM
dentro MySQL
?
Cosa c'è InnoDB
e MyISAM
dentro MySQL
?
Risposte:
InnoDB
e MYISAM
sono motori di archiviazione perMySQL
.
Questi due differiscono nella loro implementazione del blocco: InnoDB
blocca la riga specifica nella tabella e MyISAM
blocca l'interaMySQL
tabella.
È possibile specificare il tipo fornendo MYISAM
OR InnoDB
durante la creazione di una tabella in DB.
Dai un'occhiata a
InnoDB è un motore di archiviazione per MySQL, incluso come standard in tutti i binari correnti distribuiti da MySQL AB. Il suo principale miglioramento rispetto ad altri motori di archiviazione disponibili per l'uso con MySQL è il supporto delle transazioni conforme ad ACID
MyISAM è il motore di archiviazione predefinito per le versioni del sistema di gestione del database relazionale MySQL precedenti alla 5.5 1 . Si basa sul vecchio codice ISAM ma ha molte utili estensioni. La principale carenza di MyISAM è l'assenza di supporto alle transazioni. Le versioni di MySQL 5.5 e successive sono passate al motore InnoDB per garantire vincoli di integrità referenziale e maggiore concorrenza.
Sono motori di archiviazione.
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
MyISAM: il motore di archiviazione MySQL predefinito e quello più utilizzato nel Web, nel data warehousing e in altri ambienti applicativi. MyISAM è supportato in tutte le configurazioni MySQL ed è il motore di archiviazione predefinito a meno che non abbiate configurato MySQL per usarne uno diverso per impostazione predefinita.
InnoDB: un motore di archiviazione sicuro per le transazioni (conforme ad ACID) per MySQL che dispone di funzionalità di commit, rollback e ripristino da arresto anomalo del sistema per proteggere i dati dell'utente. Il blocco a livello di riga InnoDB (senza escalation a blocchi di granularità più grossolana) e le letture non di blocco coerenti in stile Oracle aumentano la concorrenza e le prestazioni multiutente. InnoDB memorizza i dati degli utenti in indici cluster per ridurre l'I / O per query comuni basate su chiavi primarie. Per mantenere l'integrità dei dati, InnoDB supporta anche i vincoli di integrità referenziale di FOREIGN KEY.
Volevo aggiungere che avere la capacità di specificare uno specifico motore di archiviazione per tabella è uno dei punti di forza di MySQL (oltre a facilità d'uso e buone prestazioni senza modifiche). Per tutte le operazioni in cui sono necessarie transazioni, basta attenersi a InnoDB. Tuttavia, MyISAM può davvero velocizzare le cose quando le transazioni non sono necessarie in determinate situazioni e richiede meno spazio su disco e RAM rispetto a InnoDB.
Detto questo, InnoDB migliora continuamente:
Miglioramenti delle prestazioni e della scalabilità di InnoDB 1.1
MyISAM non segue ACID al contrario di InnoDB che segue le transazioni per mantenere l'integrità dei dati.
MyISAM supporta inserimenti simultanei: se una tabella non ha blocchi liberi nel mezzo del file di dati, è possibile INSERIRE nuove righe nello stesso momento in cui altri thread stanno leggendo dalla tabella. MySqlDoc
Ecco perché MyISAM è più veloce e occupa meno spazio. Ad esempio, MySQL MyISAM Storage Engine non supporta le transazioni. vincoli di MySQL MYISAM C'è un po 'chiamato concurrent-insert Per impostazione predefinita, la variabile è impostata su 1 e gli inserimenti simultanei sono gestiti come appena descritto. Se è impostato su 0, gli inserimenti simultanei sono disabilitati. Se è impostato su 2, sono consentiti inserimenti simultanei alla fine della tabella anche per le tabelle che hanno righe eliminate. È possibile eseguire un'istruzione INSERT per aggiungere righe alla fine della tabella con select contemporaneamente se non ci sono buchi / righe eliminate al centro della tabella (al momento dell'inserimento simultaneo).
Il livello di isolamento predefinito di mysql InnoDB è "Read Repeatable". Per MyISAM non è prevista alcuna transazione. InnoDB utilizza il blocco a livello di riga mentre MyISAM può utilizzare solo il blocco a livello di tabella, motivo per cui InnoDB ha la funzione di ripristino di emergenza migliore di MyISAM. È necessario acquisire manualmente il blocco a livello di tabella in MyISAM se si desidera evitare gli effetti della concorrenza.
InnoDB è un motore di archiviazione transazionale di MySQL mentre MyISAM è un motore di archiviazione non transazionale. In altre parole, InnoDB segue le proprietà ACID per mantenere l'integrità dei dati ma MyISAM non segue le proprietà ACID non riuscendo così a mantenere l'integrità dei dati.
In una tabella InnoDB (transazionale), le modifiche transazionali possono essere facilmente annullate se è necessario un rollback. Tuttavia, le modifiche apportate a una tabella MyISAM (non transazionale) non possono essere annullate quando è richiesto il rollback di una transazione.
Ad esempio, vuoi trasferire denaro dal tuo conto corrente al conto di risparmio. Questo viene fatto da una transazione che include 5 query.
1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;
Supponiamo che il processo si arresti in modo anomalo al passaggio 4. Se una tabella InnoDB è stata utilizzata qui, un rollback annullerebbe le modifiche e vieni salvato dal rischio di perdere denaro. Letteralmente, la tabella non è a conoscenza di alcun arresto anomalo poiché le modifiche non verranno applicate alla tabella a meno che il passaggio 5 non venga eseguito correttamente.
Ma nel caso di una tabella MyISAM, non è possibile annullare le modifiche transazionali quando viene chiamato un rollback o se si verifica un arresto anomalo che porta al fallimento della transazione. Ciò significa che, se la transazione si è interrotta al passaggio 3, il denaro verrà detratto dal tuo conto corrente. Ma i soldi non sarebbero stati aggiunti al tuo conto di risparmio.
Cortesia di esempio: "MySQL ad alte prestazioni: ottimizzazione, backup e replica" - Libro di Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev e Vadim Tkachenko
Quando il tuo server MySQL si blocca, i dati possono essere recuperati molto più facilmente da un insieme di tabelle MyISAM che da quel grande file di transazione InnoDB. Ogni tabella MyISAM ha un file separato, e se non sono state effettuate operazioni di scrittura su questa tabella durante il crash, non ne sarà influenzata. In caso di InnoDB, l'intero file di transazione dell'intero server MySQL deve essere reindicizzato o qualunque cosa faccia dopo un arresto anomalo. Questo può diventare piuttosto complicato.
InnoDB è l'impostazione predefinita NON myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB è il motore di archiviazione MySQL predefinito. A meno che tu non abbia configurato un motore di archiviazione predefinito diverso, emettendo un L'istruzione CREATE TABLE senza una clausola ENGINE = crea una tabella InnoDB "