Les informations que vous avez dans la question concernant MyISAM sont exactes. Cependant, je voudrais répondre à vos deux questions supplémentaires :
DERNIÈRE QUESTION
Selon le Livre
Chapitre 10 :"Moteurs de stockage" Page 196 Le paragraphe 7 indique
Sur la base de ce paragraphe, l'ancien enregistrement est remplacé par des données de liaison uniquement si les nouvelles données à insérer ne peuvent pas tenir dans le bloc précédemment alloué. Cela peut entraîner de nombreuses lignes gonflées.
QUESTION SUPPLÉMENTAIRE
D'après ma réponse précédente, il y aurait beaucoup de blocs qui ont
- bloc d'espace
- la longueur de l'enregistrement
- le nombre d'octets inutilisés dans le bloc
- Indicateurs de valeur NULL
- éventuellement un pointeur vers la suite de l'enregistrement si l'enregistrement ne tenait pas dans l'espace précédemment créé et devait être fractionné
De tels liens d'enregistrement commenceraient au début de chaque ligne contenant des données surdimensionnées insérées. Cela peut gonfler une table MyISAM .MYD
fichier très rapidement.
SUGGESTIONS
Le format de ligne par défaut d'un MyISAM est Dynamique. Lorsqu'une table est dynamique et subit de nombreux INSERT, UPDATE et DELETE, une telle table doit être optimisée avec
OPTIMIZE TABLE mytable;
Il existe une alternative :basculez le format de lignes du tableau sur Fixe. De cette façon, toutes les lignes ont la même taille. Voici comment rendre le format de ligne fixe :
ALTER TABLE mytable ROW_FORMAT=Fixed;
Même avec un format de ligne fixe, il faut du temps pour localiser un enregistrement disponible, mais le temps serait de O (1) temps de recherche (en termes simples, il faudrait le même temps pour localiser un enregistrement disponible, quel que soit le nombre de lignes la table a ou combien de lignes supprimées il y a). Vous pouvez contourner cette étape en activant concurrent_insert comme suit :
Ajoutez ceci à mon.cnf
[mysqld]
concurrent_insert = 2
Redémarrage de MySQL non requis. Courez simplement
mysql> SET GLOBAL concurrent_insert = 2;
Cela entraînerait l'envoi de tous les INSERTS à l'arrière de la table sans rechercher d'espace libre.
Avantage des tableaux à lignes fixes
- Les INSERT, UPDATE et DELETE seraient un peu plus rapides
- SELECT est 20 à 25 % plus rapide
Voici quelques-uns de mes messages sur SELECT étant plus rapides pour les formats de lignes en cours de correction
May 03, 2012
:Ce qui est le plus rapide, InnoDB ou MonISAM ?Sep 20, 2011
:Le meilleur de MyISAM et InnoDBMay 10, 2011
:Quel est l'impact sur les performances de l'utilisation de CHAR vs VARCHAR sur un champ de taille fixe ?
Inconvénient des tableaux à lignes fixes
Dans la plupart des cas, lorsque vous exécutez ALTER TABLE mytable ROW_FORMAT=Fixed;
, le tableau peut croître de 80 à 100 %. Le .MYI
fichier (pages d'index pour la table MyISAM) augmenterait également au même rythme.
ÉPILOGUE
Si vous voulez de la vitesse pour les tables MyISAM et que vous pouvez vivre avec des tables plus grandes, mes suggestions alternatives seraient nécessaires. Si vous souhaitez économiser de l'espace pour chaque table MyISAM, laissez le format de ligne tel quel (Dynamique). Vous devrez compresser la table avec OPTIMIZE TABLE mytable;
plus fréquent avec les tableaux dynamiques.