Le informazioni che hai nella domanda relativa a MyISAM sono giuste. Tuttavia, vorrei rispondere alle tue due ulteriori domande:
ULTIMA DOMANDA
Secondo il Libro
Capitolo 10:"Motori di archiviazione" Pagina 196 Il paragrafo 7 dice
In base a quel paragrafo, il vecchio record viene sovrascritto con dati di collegamento solo se i nuovi dati da inserire non possono rientrare nel blocco precedentemente allocato. Ciò può comportare molte righe gonfie.
DOMANDA AGGIUNTIVA
Dalla mia risposta precedente, ci sarebbero molti blocchi che hanno
- blocco di spazio
- la lunghezza del record
- il numero di byte non utilizzati nel blocco
- Flag indicatori di valore NULL
- probabilmente un puntatore alla continuazione del record se il record non rientrava nello spazio precedentemente creato e doveva essere suddiviso
Tali collegamenti di record inizieranno nella parte anteriore di ogni riga in cui vengono inseriti dati di grandi dimensioni. Questo può gonfiare una tabella MyISAM .MYD
archiviare molto rapidamente.
SUGGERIMENTI
Il formato di riga predefinito di un MyISAM è Dinamico. Quando una tabella è dinamica e presenta molti INSERT, UPDATE e DELETE, tale tabella dovrebbe essere ottimizzata con
OPTIMIZE TABLE mytable;
C'è un'alternativa:cambia il formato della riga della tabella su Fisso. In questo modo, tutte le righe hanno le stesse dimensioni. Ecco come rendi il formato riga fisso:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Anche con un formato riga fisso, è necessario impiegare del tempo per individuare un record disponibile, ma il tempo sarebbe O(1) tempo di ricerca (in parole povere, ci vorrebbe la stessa quantità di tempo per individuare un record disponibile, non importa quante righe la tabella ha o quante righe eliminate ci sono). Puoi ignorare questo passaggio abilitando inserimento_concorrente come segue:
Aggiungilo a mio.cnf
[mysqld]
concurrent_insert = 2
Non è richiesto il riavvio di MySQL. Corri
mysql> SET GLOBAL concurrent_insert = 2;
Ciò farebbe sì che tutti gli INSERT vadano sul retro del tavolo senza cercare spazio libero.
Vantaggio delle tabelle a righe fisse
- INSERT, UPDATE ed DELETE sarebbero un po' più veloci
- SELECT sono il 20-25% più veloci
Ecco alcuni dei miei post su SELECT che è più veloce per la correzione dei formati di riga
May 03, 2012
:Che è più veloce, InnoDB o Il mio ISAM?Sep 20, 2011
:Il meglio di MyISAM e InnoDBMay 10, 2011
:Qual è l'impatto sulle prestazioni dell'utilizzo di CHAR rispetto a VARCHAR su un campo di dimensioni fisse?
Svantaggio delle tabelle a righe fisse
Nella maggior parte dei casi, quando esegui ALTER TABLE mytable ROW_FORMAT=Fixed;
, la tabella può crescere dell'80-100%. Il .MYI
anche il file (pagine di indice per la tabella MyISAM) aumenterebbe alla stessa velocità.
EPILOGO
Se vuoi velocità per i tavoli MyISAM e puoi vivere con tavoli più grandi, sarebbero necessari i miei suggerimenti alternativi. Se vuoi risparmiare spazio per ogni tabella MyISAM, lascia il formato della riga così com'è (Dynamic). Dovrai comprimere la tabella con OPTIMIZE TABLE mytable;
più frequente con le tabelle dinamiche.