MySQL tipi di tabelle: MyISAM e InnoDB
MySQL è in grado di gestire diversi tipi
di tabelle per immagazzinare
i dati; questa peculiarità è realizzata usando diversi sistemi di gestione dati (in inglese
storage engines), ognuno in
grado di gestire un tipo particolare di tabella, i quali si distinguono uno dall'altro per alcune caratteristiche peculiari, mentre alcune
caratteristiche sono comuni
a tutti. Ad esempio, ogni data base è rappresentato da una directory all'interno della
datadir, e ogni tabella ha un file che ne descrive
le caratteristiche, e questo è valido sempre, a prescindere dal sistema di gestione
dati utilizzato. D'altra parte, un sistema di gestione dati differisce da un altro,
ad esempio, per quanto riguarda la gestione
dei
lock di riga e di tabella, o per quel che
riguarda la gestione dei deadlock (questi ultimi
si verificano quando due o più query sono
bloccate e non possono proseguire perché
ognuna aspetta la fine delle altre). Il sistema
di gestione dati viene specificato al momento
della creazione della tabella in base
alle caratteristiche che esso offre. Per conoscere
il sistema di gestione dati utilizzato
per una determinata tabella si possono
usare le istruzioni
SHOW CREATE TABLE
nome tabella o
SHOW TABLE STATUS.
Utilizzare un tipo di tabella, e quindi un sistema
di gestione dati, piuttosto che un altro può
rappresentare la differenza fra un data base
molto performante e uno con performance
più scarse. Occorre sottolineare però che,
a seconda del data base che si intende è
realizzare, è possibile utilizzare alcune
tabelle di un tipo e altre di un altro tipo.
Di seguito descriviamo brevemente
le principali caratteristiche dei tipi
di tabella più utilizzati, ricordando
che, per impostazione predefinita, MySQL
utilizza tabelle di tipo MyISAM.
Tabelle di tipo MyISAM
Questo tipo di tabelle presenta le seguenti caratteristiche:
- ogni tabella è rappresentata sul disco da un file che ne descrive il formato
con estensione .frm, da un file contenente i dati con estensione .MYO e da un file contenente gli indici con estensione .MYI, tutti locati all'interno della directory che rappresenta il database
- la clausola AUTO_INCREMENT è più flessibile di tutti gli altri tipi di tabelle
- possono essere utilizzate per creare tabelle di tipo MERGE
- possono essere convertite in tabelle compresse, a sola lettura, molto veloci
- supportano il tipo di ricerca FULlTEXT
- supportano il lock a livello di tabella per evitare che più query accedano
alla tabella in scrittura. In lettura l'accesso è consentito simultaneamente a più query, mentre in scrittura è utilizzato un lock esclusivo a livello di tabella in modo
che, mentre una query sta scrivendo
i suoi dati, altre interrogazioni non possano accedere alla tabella neanche in lettura. Questo comportamento evita i deadlock descritti precedentemente.
Tabelle di tipo InnoDB
Questo tipo di tabella presenta le seguenti caratteristiche:
- ogni tabella è composta da un file
di definizione con estensione .frm, mentre
i dati e gli indici sono scritti all'interno di uno o più file utilizzati come tablespace comune a tutte le tabelle di questo tipo
- questo tipo di tabella supporta le transazioni, operazioni che iniziano con l'istruzione BEGIN, seguita da una serie di istruzioni che alterano
i dati su una o più tabelle e si concludono
con l'istruzione COMMIT per scrivere definitivamente sul data base tutte
le istruzioni dopo la BEGIN, o con l'istruzione ROllBACK per scartare tutte le modifiche introdotte dalle istruzioni seguenti BEGIN, lasciando inalterato il contenuto delle tabelle
-
InnoDB fornisce un sistema per il recupero automatico dei dati in caso di crash server My5QL o del computer sul quale il server
è in esecuzione
- InnoDB supporta le relazioni (foreign keys) e i vincoli di integrità referenziali. Ad esempio, se si hanno due tabelle, Dipartimenti
e Impiegati, e sulla seconda è istituito
un vincolo di integrità referenziale che lega un impiegato a un dipartimento, non si potrà inserire un nuovo impiegato senza specificare il dipartimento di appartenenza e non
si potrà cancellare un dipartimento se a questo afferisce almeno un impiegato
- la gestione della concorrenza per le query
è gestita tramite il multi-versioning e il lock a livello di riga. Il multi-versioning fa in modo che ogni transazione abbia una sua vista del database, e questo, associato allock a livello di riga, riduce la possibilità che due query possano scrivere contemporaneamente
sullo stesso record. In questo modo, però, possono verificarsi i deadlock.
Informazioni sull'autore
Sergio Ferraiolo
Descrizione:
Web Master di webdesignfirenze.com, titolare di web.at.work che ha realizzato il sito.
Mansioni: Programmatore, web designer e Analista