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 :
|