Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Row Format:differenza tra fisso e dinamico?

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:

  1. 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.

  2. 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.

  3. 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