La differenza conta davvero solo per MyISAM, altri motori di archiviazione non si preoccupano della differenza.EDIT : Molti utenti hanno commentato che a InnoDB interessa:link 1 di a vapore , link 2 di Kaan .
Con MyISAM con righe a larghezza fissa, ci sono alcuni vantaggi:
-
Nessuna frammentazione delle righe:con righe a larghezza variabile è possibile dividere singole righe in più sezioni nel file di dati. Ciò può aumentare le ricerche del disco e rallentare le operazioni. È possibile deframmentarlo con OPTIMIZE TABLE, ma questo non è sempre pratico.
-
Dimensione del puntatore del file di dati:in MyISAM, esiste un concetto di puntatore del file di dati che viene utilizzato quando è necessario fare riferimento al file di dati. Ad esempio, viene utilizzato negli indici quando si riferiscono a dove è effettivamente presente la riga. Con dimensioni di larghezza fisse, questo puntatore si basa sull'offset della riga nel file (ad es. le righe sono 1, 2, 3 indipendentemente dalle loro dimensioni). Con larghezza variabile, il puntatore si basa sull'offset di byte (ad es. le righe potrebbero essere 1, 57, 163). Il risultato è che con tabelle di grandi dimensioni, il puntatore deve essere più grande, il che aggiunge potenzialmente molto più sovraccarico alla tabella.
-
Più facile da riparare in caso di corruzione. Poiché ogni riga ha la stessa dimensione, se la tua tabella MyISAM viene danneggiata è molto più facile ripararla, quindi perderai solo i dati effettivamente danneggiati. Con la larghezza variabile, in teoria è possibile che i puntatori di larghezza variabile vengano incasinati, il che può comportare una cattiva gestione dei dati.
Ora lo svantaggio principale della larghezza fissa è che spreca più spazio. Ad esempio, devi utilizzare i campi CHAR invece dei campi VARCHAR, così finirai per occupare spazio extra.
Normalmente, non avrai molta scelta nel formato, poiché è dettato in base allo schema. Tuttavia, potrebbe valere la pena se hai solo pochi varchar o un singolo blob/testo per cercare di ottimizzare in tal senso. Ad esempio, considera la possibilità di trasformare l'unico varchar in un char o di dividere il BLOB nella sua stessa tabella.
Puoi leggere ancora di più su questo su:
http://dev.mysql.com/doc/refman /5.0/it/formato-statico.html
http://dev.mysql.com/doc/refman /5.0/en/formato-dinamico.html