Database MySql: differenze tra myISAM e InnoDB

Database MySQL: MyISAM o InnoDB con WordPress 6

Come ben sappiamo WordPress è progettato per funzionare solo su Database MySQL e ottimizzarlo è davvero fondamentale se volete che il nostro sito web abbia le massime performance

Uno dei primi passaggi nell’ottimizzazione di portali di una “certa età”, realizzati con WordPress, è andare a verificare il corretto funzionamento del DataBase.

Infatti, molti siti utilizzano ancora il motore di archiviazione MyISAM nel loro database invece del più performante InnoDB. Ma cosa comporta utilizzare un storage engine rispetto ad un altro?

Con l’avvento di MySQL 5.5 il motore di default dei database MySQL è divenuto InnoDB e perciò ora si pone il dubbio: meglio MyISAM o InnoDB?

MyISAM: le caratteristiche

MyISAM è stato lo storage engine predefinito del database MySQL dalla sua introduzione (versione 3.23) fino alla versione 5.5.

MyISAM utilizza la struttura ISAM e deriva da un tipo più vecchio, oggi non più utilizzato, che si chiamava appunto ISAM.

È estremamente veloce e richiede poche risorse sia in termini di memoria RAM che in termini di spazio su disco. Il suo limite principale rispetto ad alcuni altri SE (Storage Engine) consiste nel mancato supporto delle transazioni (Commit e Roolback).

Le tabelle di tipo MyISAM si compongono di 3 file con estensioni .frm.MYD e .MIY. Il primo file contiene la struttura della tabella, il secondo i dati e il terzo gli indici.

Per trasferire una tabella da una macchina ad un’altra è sufficiente spostare questi 3 file.

MyISAM risulta una buona scelta per la maggior parte delle tabelle WordPress: lavora bene e non necessita di troppe ottimizzazioni (anche perché, pur ottimizzandolo, non ricaverete sensibili benefici in termini di performance).

Ottimo nella lettura e supporta la piena indicizzazione testuale; purtroppo presenta anche degli svantaggi:

  • nessun supporto operativo,
  • nessun controllo dell’integrità dei dati e consente solo il blocco completo delle tabelle rendendo più lento ogni aggiornamento o inserimento nuovo di dati in quanto, per ognuna di queste operazioni, l’intera tabella risulterà bloccata rendendola inaccessibile alle query.

InnoDB: le caratteristiche

InnoDB è uno storage engine molto più completo rispetto ad MyISAM ed è stato introdotto recentemente come motore del database MySql. Tra le caratteristiche principali vi sono le foreign key e la transazionalità, con le quali è possibile creare una base di dati relazionale e transazionale.

Veloce nell’aggiornamento e nell’inserimento di dati perché permette il blocco per riga per le operazioni multiple sulla stessa tabella e supporta chiavi estranee per le relazioni nella tabella stessa.

La cosa veramente rilevante di InnoDB è il controllo dell’integrità dei dati: mentre MyISAM esegue una scansione completa del proprio database per ripararlo, InnoDB legge le istruzioni registrate nei log e ripristina il tutto; da ciò consegue che il tempo che impiega InnoDB per il recupero dei dati non aumenta (come nel caso dell’uso di MyISAM) con l’aumento delle dimesioni del database.

Per trasferire questo tipo di tabelle da un server ad un altro non è sufficiente spostarne i file e questo rende più complicate le procedure di backup.

Database MySQL: differenze tra InnoDB e MyISAM

Database MySql: myISAM e InnoDB
Database MySql: myISAM e InnoDB

Vediamo in cosa si differenzia questi due motori per il salvataggio dei dati, InnoDB e MyISAM ovviamente:

  • per riparare una tabella dopo un crash del sistema, InnoDB riesegue le ultime istruzioni registrate nei log. MyISAM deve invece eseguire una scansione completa della tabella per poi ripararla, ed eventualmente ricostruire gli indici. Di conseguenza, il tempo impiegato da InnoDB per la riparazione non aumenta con il crescere dei dati contenuti nella tabella, mentre il tempo impiegato da MyISAM è proporzionale alle dimensioni della tabella.
  • InnoDB ha una sua propria gestione della cache. Le pagine di dati modificate non vengono inviate immediatamente al sistema e questo, in alcuni casi, può rendere la modifica dei dati molto più rapida con InnoDB.
  • MyISAM generalmente immagazzina i record di una tabella nell’ordine in cui sono stati creati, mentre InnoDB li immagazzina nell’ordine seguito dalla chiave primaria. Quando viene utilizzata la chiave per la lettura di una riga, l’operazione avviene più rapidamente.
  • InnoDB comprime i record molto meno rispetto a MyISAM. Questo significa che la memoria e lo spazio su disco richiesti da InnoDB sono maggiori, nonostante nella versione 5 di MySQL lo spazio su disco richiesto sia diminuito del 20%.

Ne risulta quindi che è molto più affidabile rispetto a MyISAM.

Quale motore scegliere?

Se hai acquistato recentemente un servizio di database MySql e stai usando una versione di WordPress abbastanza nuova, è probabile che stai già adoperando il motore di archiviazione MySQL di InnoDB.

Se il tuo sito ha un po’ di anni potresti avere tabelle MyISAM e InnoDB miste e abbinate. In questo caso potresti vedere dei miglioramenti convertendole tutte.

Conclusione

In generale, se avete MyISAM come motore di default per il vostro database, potreste comunque provare InnoDB. Tutto dipende dalle vostre necessità: se avete un server con molta memoria non noterete rallentamenti (passando da MyISAM a InnoDB) e impostandolo per bene noterete notevoli miglioramenti nell’accesso ai dati.

Di default WordPress non supporta le ricerche fulltext, perciò potrebbe essere una buona idea quella di utilizzare InnoDB, così come se avete necessità di affidabilità nel recupero dati.

Per i siti normali, con non molto traffico, il motore non è un fattore determinante; diventa importante con l’aumentare del traffico sul vostro sito

Autore Bartolomeo

Consulente tecnico con la passione per il web e la tecnologia e tutto quello che le ronza intorno.
Nel tempo libero scrivo articoli per il mio blog su argomenti vari, in particolare su configurazione Windows, Linux e WordPress.

Condividi questo articolo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ho letto la policy privacy e accetto il trattamento dei miei dati personali in conformità al D.Lgs. 196/2003