I motori di archiviazione sono componenti MySQL che gestiscono le operazioni SQL per diversi tipi di tabelle. InnoDB
è il motore di archiviazione predefinito e più generico, e Oracle raccomanda di usarlo per le tabelle tranne che per casi d’uso specializzati. (L’istruzione CREATE TABLE
in MySQL 8.0 crea tabelle InnoDB
per impostazione predefinita)
MySQL Server usa un’architettura di motori di archiviazione pluggable che permette di caricare e scaricare i motori di archiviazione da un server MySQL in funzione.
Per determinare quali motori di archiviazione supporta il tuo server, usa l’istruzione SHOW ENGINES
. Il valore nella colonna Support
indica se un motore può essere usato. Un valore di YES
, NO
, o DEFAULT
indica che un motore è disponibile, non disponibile, o disponibile e attualmente impostato come motore di archiviazione predefinito.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Questo capitolo copre i casi d’uso per motori di archiviazione MySQL speciali. Non copre lo storage engine predefinito InnoDB
o lo storage engine NDB
che sono trattati nel Capitolo 15, Il motore di archiviazione InnoDB e nel Capitolo 23, MySQL NDB Cluster 8.0. Per gli utenti avanzati, contiene anche una descrizione dell’architettura dello Storage Engine pluggable (vedi Sezione 16.11, “Panoramica dell’architettura dello Storage Engine MySQL”).
Per informazioni sulle caratteristiche offerte nei binari commerciali di MySQL Server, vedi MySQL Editions, sul sito web di MySQL. I motori di archiviazione disponibili potrebbero dipendere dall’edizione di MySQL che stai usando.
Per le risposte alle domande più comuni sui motori di archiviazione di MySQL, vedi la Sezione A.2, “MySQL 8.0 FAQ: Storage Engines”.
MySQL 8.0 Storage Engines supportati
-
InnoDB
: Lo storage engine predefinito in MySQL 8.0.InnoDB
è un motore di archiviazione transaction-safe (ACID compliant) per MySQL che ha capacità di commit, rollback e crash-recovery per proteggere i dati degli utenti. Il lock a livello di rigaInnoDB
(senza escalation ai lock a granularità più grossa) e le letture coerenti non bloccanti in stile Oracle aumentano la concorrenza multiutente e le prestazioni.InnoDB
memorizza i dati degli utenti in indici raggruppati per ridurre l’I/O per le query comuni basate su chiavi primarie. Per mantenere l’integrità dei dati,InnoDB
supporta anche i vincoli di integrità referenzialeFOREIGN KEY
. Per maggiori informazioni suInnoDB
, vedere Capitolo 15, Il motore di archiviazione InnoDB. -
MyISAM
: Queste tabelle hanno un piccolo footprint. Il bloccaggio a livello di tabella limita le prestazioni nei carichi di lavoro in lettura/scrittura, quindi è spesso usato nei carichi di lavoro di sola lettura o per lo più in lettura nelle configurazioni Web e di data warehousing. -
Memory
: Memorizza tutti i dati nella RAM, per un accesso veloce in ambienti che richiedono ricerche veloci di dati non critici. Questo motore era precedentemente noto come motoreHEAP
. I suoi casi d’uso sono in diminuzione;InnoDB
con la sua area di memoria buffer pool fornisce un modo generico e durevole per mantenere la maggior parte o tutti i dati in memoria, eNDBCLUSTER
fornisce veloci ricerche di valori chiave per enormi insiemi di dati distribuiti. -
CSV
: Le sue tabelle sono davvero file di testo con valori separati da virgola. Le tabelle CSV ti permettono di importare o scaricare dati in formato CSV, per scambiare dati con script e applicazioni che leggono e scrivono lo stesso formato. Poiché le tabelle CSV non sono indicizzate, di solito si mantengono i dati nelle tabelleInnoDB
durante le normali operazioni, e si usano le tabelle CSV solo durante la fase di importazione o esportazione. -
Archive
: Queste tabelle compatte e non indicizzate sono destinate a memorizzare e recuperare grandi quantità di informazioni storiche, archiviate o di controllo della sicurezza a cui si fa raramente riferimento. -
Blackhole
: Il motore di archiviazione Blackhole accetta ma non memorizza dati, simile al dispositivo Unix/dev/null
. Le query restituiscono sempre un insieme vuoto. Queste tabelle possono essere utilizzate in configurazioni di replica in cui le istruzioni DML sono inviate ai server di replica, ma il server sorgente non mantiene la propria copia dei dati. -
NDB
(conosciuto anche comeNDBCLUSTER
): Questo motore di database in cluster è particolarmente adatto per applicazioni che richiedono il più alto grado possibile di uptime e disponibilità. -
Merge
: Permette a un DBA o a uno sviluppatore MySQL di raggruppare logicamente una serie di tabelleMyISAM
identiche e farvi riferimento come un unico oggetto. Ottimo per ambienti VLDB come il data warehousing. -
Federated
: Offre la possibilità di collegare server MySQL separati per creare un database logico da molti server fisici. Molto buono per ambienti distribuiti o data mart. -
Example
: Questo motore serve come esempio nel codice sorgente MySQL che illustra come iniziare a scrivere nuovi motori di archiviazione. È principalmente di interesse per gli sviluppatori. Il motore di archiviazione è uno “stub” che non fa nulla. Puoi creare tabelle con questo motore, ma nessun dato può essere memorizzato in esse o recuperato da esse.
Non sei limitato ad usare lo stesso motore di memorizzazione per un intero server o schema. Si può specificare il motore di archiviazione per qualsiasi tabella. Per esempio, un’applicazione potrebbe usare principalmente tabelle InnoDB
, con una tabella CSV
per esportare i dati in un foglio di calcolo e alcune tabelle MEMORY
per spazi di lavoro temporanei.
Scegliere un motore di archiviazione
I vari motori di archiviazione forniti con MySQL sono progettati con diversi casi d’uso in mente. La seguente tabella fornisce una panoramica di alcuni motori di archiviazione forniti con MySQL, con note chiarificatrici dopo la tabella.
Tabella 16.1 Storage Engines Feature Summary
Feature | MyISAM | Memory | InnoDB | Archive | NDB | |
---|---|---|---|---|---|---|
B-indici ad albero | Sì | Sì | Sì | No | No | |
Backup/point-in-time recovery (nota 1) | Sì | Sì | Sì | Sì | Sì | |
Supporto database cluster | No | No | No | No | No | Sì |
Indici raggruppati | No | No | Sì | No | No | |
Dati compressi | Sì (nota 2) | No | Sì | Sì | No | |
Cache di dati | No | N/A | Sì | No | Sì | |
Dati criptati | Sì (nota 3) | Sì (nota 3) | Sì (nota 4) | Sì (nota 3) | Sì (nota 3) | |
Supporto chiave straniera | No | No | Sì | No | Sì (nota 5) | |
Full-indici di ricerca testuale | Sì | No | Sì (nota 6) | No | No | |
Supporto geospaziale supporto tipo dati | Sì | No | Sì | Sì | Sì | |
indicizzazione geospaziale supporto | Sì | No | Sì (nota 7) | No | No | |
indici Hash | No | Sì | No (nota 8) | No | Sì | |
Cache indice | Sì | N/A | Sì | No | Sì | |
Granularità di blocco | Tabella | Tabella | Riga | Row | Row | |
MVCC | No | No | Sì | No | No | No |
Sostegno alla replica (nota 1) | Sì | Limitato (nota 9) | Sì | Sì | Sì | |
Limiti di stoccaggio | 256TB | RAM | 64TB | Nessuno | 384EB | |
T-indici ad albero | No | No | No | No | Sì | |
Transazioni | No | No | Sì | No | Sì | |
Aggiornamento statistiche per dizionario dati | Sì | Sì | Sì | Sì | Sì |
Note:
1. Implementato nel server, piuttosto che nel motore di archiviazione.
2. Le tabelle MyISAM compresse sono supportate solo quando si usa il formato di riga compresso. Le tabelle che usano il formato compresso con MyISAM sono di sola lettura.
3. Implementato nel server tramite funzioni di crittografia.
4. Implementato nel server tramite funzioni di crittografia; in MySQL 5.7 e successivi, è supportata la crittografia data-at-rest.
5. Il supporto per le chiavi esterne è disponibile in MySQL Cluster NDB 7.3 e successivi.
6. Il supporto per gli indici FULLTEXT è disponibile in MySQL 5.6 e successivi.
7. Il supporto per l’indicizzazione geospaziale è disponibile in MySQL 5.7 e successivi.
8. InnoDB utilizza gli indici hash internamente per la sua funzione Adaptive Hash Index.
9. Vedere la discussione più avanti in questa sezione.
.