# InnoDB: il miglior storage engine per MySQL?

Se i siti web di dimensioni più grandi si caricano lentamente, è spesso dovuto alla mancata ottimizzazione dei relativi [database](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/database/ "Database"). Chi mette in ordine è già a metà dell’opera, e questo vale anche per il settore digitale. Con i database in costante crescita, è necessario un **sistema adeguato di gestione dei database** o [DBMS](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/sistema-di-gestione-di-base-di-dati-dbms/ "Sistema di gestione di base di dati (DBMS)"). Tra questi DBMS troviamo anche [MySQL](https://www.ionos.it/digitalguide/server/know-how/imparare-a-utilizzare-mysql-guida-per-principianti/ "Imparare a utilizzare MySQL: guida per principianti"), che consente di elaborare, memorizzare e archiviare in modo permanente grandi quantità di dati.

InnoDB svolge un ruolo importante nella memorizzazione dei dati su MySQL. Si tratta di **un sottosistema di archiviazione** che grazie soprattutto **al miglioramento delle sue prestazioni e affidabilità** ha prevalso negli ultimi anni su altre storage engines. Vi spieghiamo esattamente di cosa si tratta, gli svantaggi che comporta e come si differenzia dal sottosistema di archiviazione MyISAM.

## Che cos’è InnoDB?

InnoDB si è evoluto da sottosistema di archiviazione a **storage engine tuttofare** per MySQL. L’elevata affidabilità, anche ad alte prestazioni, ha reso InnoDB lo storage engine standard di MySQL dalla versione 5.6 in poi.

N.B. MySQL è un database open source compatibile con diversi storage engines, il che lo rende così flessibile e ideale per il web hosting. Oltre a InnoDB e al predecessore ufficiale MyISAM, esistono anche altri engine, come BerkeleyDB, CSV, NDB e Federated Engine.

Come sistema di gestione di database, MySQL permette **la memorizzazione, l’indicizzazione e il recupero di dati in una tabella**. Quando si tratta, ad esempio, di leggere e scrivere grandi quantità di dati, come nel caso di siti web o applicazioni, o quando i dati devono essere elaborati in vista di una transazione, il software fornisce la soluzione corretta. InnoDB offre a MySQL lo storage engine di cui ha bisogno, che si comporta come un modulo da integrare in modo flessibile nel software. MySQL determina comunque sempre la modalità con cui memorizzare i dati di un database.

N.B. I database sono costituiti da tabelle assegnate durante la configurazione di uno specifico storage engine come InnoDB.

La maggior parte degli engine memorizza i dati su dischi o li conserva nella memoria principale per un accesso rapido. In InnoDB, le transazioni di dati vengono eseguite indipendentemente l’una dall’altra: la **transazione** viene scritta sul rispettivo supporto di memorizzazione solo dopo essere stata completata. Questo permette di prevenire accessi incompleti a un database creato.

N.B. Le **transazioni** sono pacchetti di dati frutto di diverse operazioni indissolubili. In caso di fallimento di una sola operazione, fallisce anche l’intera transazione. Per correggere un errore del genere è necessario annullare non solo l’operazione difettosa, ma anche tutte le precedenti. Si tratta di un processo che richiede più tempo di una semplice operazione, ma è l’unico modo per garantire un database coerente.

## Perché MySQL utilizza InnoDB?

Ogni tabella InnoDB **dispone i dati su disco**. Questo rende l’accesso più lento, ma molto più sicuro, dato che ogni tabella è ottimizzata con una chiave primaria. La selezione dei dati è quindi più veloce, mentre l’inserimento e l’aggiornamento sono più lenti. Questo è il motivo per cui InnoDB è particolarmente adatto come storage engine per MySQL, soprattutto per **database più grandi** con molti dati collegati tra loro.

Come già accennato, i dati di una transazione in InnoDB sono correlati. Quando i dati vengono eliminati, InnoDB elimina automaticamente tutti i dati di riferimento, rendendo notevolmente più facile per l’utente rispettare **l’integrità referenziale del database**. Questa integrità referenziale deve essere, tuttavia, stabilita in anticipo, altrimenti non viene applicata in automatico. Allo stesso modo è possibile, ad esempio, bloccare gli accessi in scrittura ai record di dati.

La struttura delle tabelle di **InnoDB** è memorizzata in **file frm**, payload e indici all’interno di una tablespace connessa al database che può comprendere uno o più file. Anche in questo caso vale l’integrità referenziale: **la configurazione della tablespace** può essere distribuita in directory diverse, ma deve essere impostata all’inizio del lavoro e **non può essere modificata successivamente**. Il lavoro con una tabella InnoDB è simile a quello con una partizione del disco rigido, dove le regolazioni successive possono provocare la perdita di dati.

L’**esempio più conosciuto** di InnoDB è probabilmente [mediawiki](https://www.mediawiki.org/ "MediaWiki"), il software che, tra le altre cose, costituisce la base per il sito web di Wikipedia.

N.B. Un sistema di database adatto è uno dei componenti più importanti per gestire un’applicazione web con successo. Le [soluzioni di Web hosting di IONOS](https://www.ionos.it/hosting/web-hosting "Web hosting di IONOS") vi offrono un potente database in un pacchetto personalizzato composto da webspace, memoria centrale e un dominio.

## Vantaggi e svantaggi della combinazione di MySQL e InnoDB

InnoDB è fondamentalmente più recente e moderno di altri storage engines per MySQL. Tuttavia, è **anche più complesso** e richiede un **ambiente di database molto più potente**. Poiché aumenta costantemente anche la complessità delle stesse applicazioni web, i gestori dipendono sempre più dalle possibilità (transazioni, chiavi esterne) che MySQL può offrire grazie a InnoDB: tutti i processi su un sito web si basano sulla lettura dei contenuti del database. Il tempo di risposta con InnoDB può essere più lento, ad esempio quando vengono aggiornati i post o si creano nuovi articoli, ma la parte decisiva, ovvero **la fornitura dei nuovi contenuti all’utente**, avviene **molto più rapidamente**.

I vantaggi e gli svantaggi di InnoDB si compensano a vicenda, purché si tratti di un sito web ordinario e moderno. Se parliamo invece di uno shop online, si evidenziano subito i limiti: in questo caso, ad esempio, nel sistema di prenotazione vengono eseguiti molti accessi in scrittura, per cui il **sistema di chiavi di sola lettura** di InnoDB non è molto utile. In questo contesto vengono invece utilizzate tabelle che gestiscono meglio gli accessi di scrittura, come MyISAM.

L’aspetto senza dubbio più importante quando **MySQL utilizza InnoDB** è che modifiche errate all’interno dei database possono rendere inutilizzabile l’intero sito web. Prima di apportare qualunque modifica è pertanto necessario eseguire un backup del database esistente. Proprio per questo, InnoDB utilizza un log delle transazioni che supporta il ripristino automatico in caso di errore.

## Cosa distingue InnoDB da MyISAM?

Dalla versione 5, MySQL supporta più di dieci storage engine diversi. MyISAM è quello più conosciuto. Questo motore memorizza i dati delle singole tabelle in due file, uno per il file e uno per l’indice. **ISAM** sta per “**I**ndexed **S**equential **A**ccess **M**ethod” (metodo di accesso sequenziale indicizzato), quindi non permette a più utenti o applicazioni di scrivere contemporaneamente nella stessa tabella. La **memorizzazione sequenziale** consente l’accesso in scrittura a una sola applicazione per volta. La tabella può comunque essere letta da più utenti contemporaneamente. MyISAM è imbattibile per la lettura contemporanea di molti pacchetti piccoli di dati da parte di più utenti.

InnoDB è conforme allo **standard ACID** (**A**tomicity **C**onsistency **I**solation **D**urability). Tutte le **transazioni vengono eseguite separatamente** l’una dall’altra, ma più applicazioni possono scrivere i dati contemporaneamente nella stessa tabella. InnoDB ha un chiaro vantaggio nel recupero dei dati, ovvero l’operazione **SELECT**, mentre MyISAM è un po’ più veloce quando si tratta di accesso in scrittura a un database, grazie alle operazioni **INSERT** e **UPDATE**. InnoDB compensa comunque ampiamente la minore velocità con il suo registro delle transazioni. MyISAM non dispone della funzione di ripristino automatico in caso di errore, quindi è consigliato eseguire sempre un backup prima di apportare qualunque modifica.

In sintesi Lo storage engine InnoDB non è sempre l’alternativa migliore al suo predecessore MyISAM, ma in caso di progetti o database più grandi o complessi, InnoDB è la scelta giusta. MyISAM è significativamente più potente per database o applicazioni più piccoli. Usati correttamente, entrambi gli storage engines rappresentano soluzioni valide. I due moduli si possono anche combinare nello stesso database, se necessario.


This is a markdown version of: [https://www.ionos.it/digitalguide/hosting/tecniche-hosting/che-cose-innodb/](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/che-cose-innodb/) for AI/LLM consumption.