• 10 tipi di tabelle in mysql

    10 tipi di tabelle in MySQL

    MySQL gestisce diversi tipi di tabelle (chiamati anche storage engine). Ciascuno storage engine ha i suoi vantaggi e svantaggi. Conoscerne le caratteristiche è utile per poterle utilizzare in modo efficace per ottimizzare le prestazioni del database.

    • MyISAM: è il motore storico di MySQL, che estende lo storage engine ISAM. Prima della versione 5.5, era il motore di memorizzazione predefinito utilizzato quando si creava una tabella senza specificarne lo storage engine in modo esplicito. Le tabelle di tipo MyISAM sono veloci e di dimensioni ridotte. La dimensione di una tabella di questa tipologia può arrivare fino a 256TB e non è transaction-safe.
    • InnoDB: dalla versione 5.5 è il motore predefinito di MySQL. Le tabelle InnoDB supportano completamente il modello transazionale ACID (Atomic, Consistent, Isolated, Durable), che garantisce la validità e l’integrità dei dati in una transazione. InnoDB supporta le chiavi esterne, il le operazioni di commit, rollback , roll-forward. La dimensione di una tabella di tipo InnoDB può arrivare fino a 64 TB. Le tabelle InnoDB (come anche quelle MyISAM) sono portabili tra diverse piattaforme e sistemi operativi.
    • Memory (heap): le tabelle di tipo Memory vengono conservate nella memoria RAM del server e utilizzano indici hash. Sono più veloci delle tabelle MyISAM e sono adatte per chi ha la necessità di conservare le informazioni in maniera temporanea, ma con tempi di accesso molto rapidi.
    • Archive: consente di memorizzare un numero elevato di record per scopi di archiviazione (a cui quindi non si accede spesso) in un formato compresso per risparmiare spazio disco. I record inseriti vengono compressi (in fase di inserimento) e decompressi (in fase di lettura) mediante la libreria zlib. Le tabelle di tipo Archive consentono solo istruzioni di tipo INSERT e SELECT e non non supportano gli indici, per cui è necessaria una scansione completa della tabella per il recupero delle informazioni.
    • CSV: lo storage engine CSV memorizza i dati nel formato di file Comma Separated Values (CSV), cioè su file di testo in cui i campi sono separati da un carattere separatore, come ad esempio la virgola o il punto e virgola. Una tabella di tipo CSV è comoda per la migrazione dei dati in applicazioni non-SQL come i fogli di calcolo che sono in grado di gestire direttamente questo formato. Non supporta il tipo di dati NULL e l’operazione di lettura richiede una scansione completa della tabella.
    • NDB: si tratta del motore utilizzato in un ambiente distribuito, usato da MySQL Cluster per implementare tabelle partizionate su diversi computer.
    • Merge: è un insieme di tabelle MyISAM identiche (hanno identiche informazioni sulle colonne sugli indici) che possono essere usate come un unico oggetto.
    • Federated: consente di gestire i dati da un server MySQL remoto senza l’utilizzo di cluster o tecnologia di replicazione. La tabelle locali di tipo Federated non memorizzano  dati e le query estraggono i dati dalle tabelle remote di tipo Federated. In questo modo MySQL offre una rappresentazione logica di tabelle differenti su diversi server, che agli occhi dell’utente sembrano un unico database.
    • Blackhole: lo store engine Blackhole agisce come un ” buco nero”, che accetta i dati, ma li butta via e non li memorizza. Se si crea una tabella e si inseriscono dei record, una query su quella tabella restituisce sempre un resultset vuoto. Tutto ciò che finisce in questo tipo di tabella viene perso.
    • Example: lo store engine Example è uno stub engine che non fa nulla;  è uno scheletro che serve da esempio agli sviluppatori per scrivere un proprio engine.

    Comandi per la gestione dei tipi di tabelle in MySQL

     

    Il comando seguente ad esempio crea una tabella di tipo MyISAM:

     

    CREATE TABLE IF NOT EXISTS tasks (
      task_id INT(11) NOT NULL AUTO_INCREMENT,
      subject VARCHAR(45) DEFAULT NULL,
      start_date DATE DEFAULT NULL,
      end_date DATE DEFAULT NULL,
      description VARCHAR(200) DEFAULT NULL,
      PRIMARY KEY (task_id)
    ) ENGINE=MyISAM;

     

    Per sapere di che tipo è una tabella esistente, basta lanciare la seguente query:

     

    SHOW TABLE STATUS WHERE Name = 'users';

     

    che restituisce un resultset che, tra tutti i campi (quelli mostrati nell’immagine sotto sono solo due), contiene il campo Engine.

     

    mysql - show table status

     

    Può essere utile usare il comando che consente di ottenere il codice che crea la tabella:

     

    SHOW CREATE TABLE users;

     

    che genera il seguente output:

     

    CREATE TABLE 'users' (
     'id' int(10) NOT NULL AUTO_INCREMENT,
     'username' varchar(50) NOT NULL,
     'password' varchar(255) NOT NULL,
     'first_name' varchar(50) NOT NULL,
     'last_name' varchar(50) NOT NULL,
     'email' varchar(50) NOT NULL,
     'profile' varchar(50) DEFAULT NULL,
     'status' varchar(20) DEFAULT NULL,
     'requestDate' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
     PRIMARY KEY ('id')
    ) ENGINE=MyISAM AUTO_INCREMENT=155 DEFAULT CHARSET=latin1;

     

    Per modificare il tipo di engine di una tabella (nell’esempio sotto viene modificata la tabella users), ad esempio da MyISAM a InnoDB, basta eseguire il comando seguente:

     

    ALTER TABLE users ENGINE=INNODB;

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">