Mysql
 sql >> Base de données >  >> RDS >> Mysql

Format de ligne MySQL :Différence entre fixe et dynamique ?

La différence n'a vraiment d'importance que pour MyISAM, les autres moteurs de stockage ne se soucient pas de la différence.EDIT : De nombreux utilisateurs ont déclaré qu'InnoDB s'en souciait :link 1 by à vapeur , lien 2 par Kaan .

Avec MyISAM avec des lignes à largeur fixe, il y a quelques avantages :

  1. Pas de fragmentation des lignes :il est possible avec des lignes à largeur variable d'obtenir des lignes uniques divisées en plusieurs sections dans le fichier de données. Cela peut augmenter les recherches de disque et ralentir les opérations. Il est possible de le défragmenter avec OPTIMIZE TABLE, mais ce n'est pas toujours pratique.

  2. Taille du pointeur de fichier de données :dans MyISAM, il existe un concept de pointeur de fichier de données qui est utilisé lorsqu'il doit référencer le fichier de données. Par exemple, ceci est utilisé dans les index lorsqu'ils font référence à l'endroit où la ligne est réellement présente. Avec des tailles de largeur fixes, ce pointeur est basé sur le décalage de ligne dans le fichier (c'est-à-dire que les lignes sont 1, 2, 3 quelle que soit leur taille). Avec une largeur variable, le pointeur est basé sur le décalage d'octet (c'est-à-dire que les lignes peuvent être 1, 57, 163). Le résultat est qu'avec de grandes tables, le pointeur doit être plus grand, ce qui ajoute potentiellement beaucoup plus de temps système à la table.

  3. Plus facile à réparer en cas de corruption. Étant donné que chaque ligne a la même taille, si votre table MyISAM est corrompue, il est beaucoup plus facile de la réparer, vous ne perdrez donc que les données réellement corrompues. Avec une largeur variable, en théorie, il est possible que les pointeurs à largeur variable soient perturbés, ce qui peut entraîner une mauvaise gestion des données.

Maintenant, le principal inconvénient de la largeur fixe est qu'elle gaspille plus d'espace. Par exemple, vous devez utiliser des champs CHAR au lieu de champs VARCHAR, vous vous retrouvez donc avec de l'espace supplémentaire.

Normalement, vous n'aurez pas beaucoup de choix dans le format, puisqu'il est dicté en fonction du schéma. Cependant, cela peut valoir la peine si vous n'avez que quelques varchar ou un seul blob/texte pour essayer d'optimiser cela. Par exemple, envisagez de transformer le seul varchar en char ou de diviser le blob en sa propre table.

Vous pouvez en savoir plus à ce sujet sur :

http://dev.mysql.com/doc/refman /5.0/fr/format-statique.html

http://dev.mysql.com/doc/refman /5.0/fr/format-dynamique.html