[+/-]
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
. See
Section 5.7.3.7, « Utiliser myisamchk
pour restaurer une table ». Vous pouvez aussi compresser les
tables MyISAM
avec l'utilitaire
myisampack
pour réduire leur taille sur le
disque. See Section 8.2, « myisampack
, le générateur de tables MySQL
compressées en lecture seule ».
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
. See
Section 13.2.5, « 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.