| 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 : 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 .| 
CREATE TABLE t (i INT) ENGINE = MYISAM;CREATE TABLE t (i INT) TYPE = MYISAM;
 | 
 
Voici les nouveautés des tables  
MyISAM
  :
 
MyISAM
  supporte aussi les fonctionnalités suivantes, dont
MySQL pourra profiter sous peu :
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
 . 
 
CREATE TABLE
 Syntax .
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. 
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 : |