Manuel de Référence MySQL 4.1 : Version Française
<<<
Le moteur de tables MyISAM Tables assemblées MERGE
>>>

15 Types de tables MySQL
 Manuel de Référence MySQL 4.1 : Version Française

->Le moteur de tables MyISAM
Tables assemblées MERGE
Tables HEAP
Tables BDB ou BerkeleyDB
Tables ISAM

15.1 Le moteur de tables MyISAM

MyISAM est le type par défaut de table en MySQL version 3.23. Il est basé sur ISAM et ajoute de nombreuses extensions pratiques.

Chaque table MyISAM est stockée en trois fichiers. Les fichiers portent le nom de la table, et ont une extension qui spécifie le type de fichier. Le fichier .frm stocke la définition de la table. L'index est stocké dans un fichier avec l'extension .MYI ( MYIndex ), et les données sont stockées dans un fichier avec l'extension .MYD ( MYData ).

Pour spécifier explicitement que vous souhaitez une table MyISAM , indiquez le avec l'option ENGINE ou TYPE lors de la création de la table :

CREATE TABLE t (i INT) ENGINE = MYISAM;
CREATE TABLE t (i INT) TYPE = MYISAM;
Normalement, les options ENGINE et TYPE sont inutiles : MyISAM est le type par défaut de table en MySQL, à moins d'avoir été spécifié autrement.Vous pouvez vérifier ou réparer une table MyISAM avec l'utilitaire myisamchk . Utilisation de myisamchk pour résoudre un crash . Vous pouvez aussi compresser les tables MyISAM avec l'utilitaire myisampack pour réduire leur taille sur le disque. myisampack , le générateur de tables MySQL compressées .

Voici les nouveautés des tables MyISAM :

  • Toutes les clés numériques sont stockées avec l'octet de poids fort en premier, pour améliorer la compression. Cela rend les données indépendantes du système d'exploitation et de la machine. La seule règle pour assurer la portabilité binaire des fichiers est que la machine doit utiliser des entiers signés pour le complément à 2 (c'est le cas de toutes les machines ces 20 dernières années), et un format de nombre à virgule flottante compatible IEEE (c'est aussi le format dominant). Le seul point où la portabilité n'est pas assurée est les machine portables, qui ont des processeurs originaux.

    Il n'y a pas de coût spécifique à stocker les données dans ce format. Les octets dans la table sont généralement non-alignés, et cela ne prend pas longtemps d'aligner des octets. De plus, le code qui lit les valeurs des colonnes n'est pas critique par rapport au reste du code.

  • Support des grands fichiers (63 bits) sur les systèmes de fichiers et les systèmes d'exploitation qui supportent les grands fichiers.
  • Les lignes de taille dynamique sont bien moins fragmentées lors de l'utilisation d'insertion et d'effacement. Cela se fait en combinant automatiquement les blocs adjacent libres, et en étendant la taille des blocs avec le suivant s'il est vide.
  • Le nombre maximal d'index par table est de 64 (32 avant MySQL 4.1.2). Cela peut être changé en recompilant. Le nombre de colonnes maximal par index est 16.
  • La taille maximale d'une clé est de 1000 octets (500 avant MySQL 4.1.2). Cela peut être changé en recompilant MySQL. Dans le cas où la clé est plus longue que 250 octets, une taille de bloc de clé plus large est utilisée, en remplacement des 1024 octets par défaut.
  • Les colonnes BLOB et TEXT peuvent être indexées.
  • Les valeurs NULL sont autorisées dans une colonne indexée. Elles prennent 0 à 1 octets par clé.
  • Les valeurs numériques sont stockées avec l'octet de poids fort en premier, pour permettre une meilleure compression.
  • Les fichiers d'index sont généralement plus petits en MyISAM qu'en ISAM . Cela signifie que MyISAM va utiliser moins de ressources systèmes que ISAM , mais il prendra plus de processeur lors de l'insertion de données dans un index compressé.
  • Lorsque les lignes sont insérées dans un ordre trié (comme lorsque vous utilisez une colonne de type AUTO_INCREMENT ), l'arbre des clé sera scindé, pour que noeud principal ne contienne qu'une clé. Cela va améliorer l'utilisation d'espace dans l'arbre des clés.
  • La gestion interne des colonnes AUTO_INCREMENT . MyISAM va automatiquement modifier cette valeur lors d'une insertion ou d'une modification. La valeur courante d' AUTO_INCREMENT peut être modifiée avec myisamchk . Cela va rendre les colonnes AUTO_INCREMENT plus rapide (au moins 10%) et les anciens nombres ne seront pas réutilisés, comme avec les vieilles tables ISAM . Notez que lorsque une clé AUTO_INCREMENT est définie à la fin d'une clé multiple, l'ancien comportement est toujours présent.
  • Vous pouvez insérer de nouvelles lignes dans une table qui n'a aucun bloc vide dans le fichier de données, en même temps que d'autres threads lisent le fichier de données (insertion simultanée). Un bloc vide peut provenir d'une modification de ligne à format dynamique (les données sont maintenant plus petites). Lorsque tous les blocs vide sont à nouveau utilisés, les insertions suivantes peuvent être simultanées.
  • Vous pouvez placer les fichiers de données et d'index dans différents dossiers pour obtenir plus de vitesse avec les options de table DATA DIRECTORY et INDEX DIRECTORY , dans la commande CREATE TABLE . Syntaxe de CREATE TABLE .
  • Depuis MySQL version 4.1, chaque colonne de caractères peut avoir un jeu de caractères distinct.
  • Il y a un indicateur dans le fichier MyISAM qui indique si la table a été correctement fermée. Si mysqld est lancé avec l'option --myisam-recover , les tables MyISAM vont automatiquement être vérifiées et réparées, si elles n'ont pas été correctement refermées.
  • myisamchk va marquer les tables comme vérifiéz s'il est exécuté avec l'option --update-state . myisamchk --fast va uniquement vérifier les tables qui n'ont pas cette marque.
  • myisamchk -a stocke les statistiques pour les parties de clés (et non plus pour les clés complètes, comme avec ISAM ).
  • myisampack peut compresser des colonnes BLOB et VARCHAR . pack_isam ne le peut pas.
MyISAM supporte aussi les fonctionnalités suivantes, dont MySQL pourra profiter sous peu :
  • Support du vrai type VARCHAR ; une colonne VARCHAR commence avec une taille, stockée sur 2 octets.
  • Les tables ayant des colonnes VARCHAR peuvent avoir un format de lignes fixe ou dynamique.
  • VARCHAR et CHAR peuvent prendre jusqu'à 64 ko.
  • Un index de hashage peut être utilisé avec UNIQUE . Cela vous permettra d'avoir un index UNIQUE sur toute combinaison de colonnes de la table. Vous ne pourrez pas utiliser un index UNIQUE pour une recherche.

Sommaire :

<< Le moteur de tables MyISAM >>
Manuel de Référence MySQL 4.1 : Version Française Types de tables MySQL Tables assemblées MERGE