:: DEVELOPER ZONE
Table des matières
MyISAMMERGEHEAPBDB ou BerkeleyDBBDBBDBBDBBDBBDB dans un futur proche : BDBBDBISAMMySQL supporte plusieurs moteurs de stockage, qui gère différents types de tables. Les moteurs de tables MySQL peuvent être transactionnels ou non-transactionnels.
Le moteur de tables originale était ISAM, qui gérait des tables
non-transactionnelles. Ce moteur a été remplacé par le moteur MyISAM
et ne doit plus être utilisé. Il est abandonné et ne doit plus être utilisé.
depuis MySQL 4.1, et il sera supprimé en MySQL 5.0.
En MySQL 3.23.0, les moteurs MyISAM et HEAP ont été introduits.
MyISAM est une version améliorée de ISAM.
Le moteur HEAP propose des tables stockées en mémoire.
Le moteur MERGE a été ajouté en MySQL 3.23.25. Il permet le regroupement
de tables MyISAM identique sous la forme d'une seule table. Tous les trois
moteurs sont non-transactionnels, et sont tous inclus par défaut.
Notez que le moteur HEAP est maintenant nommé MEMORY.
Les moteurs InnoDB et BDB gèrent des tables transactionnelles,
et ont été introduits en MySQL 3.23. Les deux font partie de la distribution
source de MySQL 3.23.34a.
BDB est inclus dans les distributions MySQL-Max pour les systèmes d'exploitation
qui le supporte. InnoDB est aussi inclus dans les distributions binaires MySQL-Max
de MySQL 3.23. Depuis MySQL 4.0, InnoDB est inclus par défaut dans toutes les
distributions binaires. Dans les distributions source, vous pouvez l'activer
ou pas en configurant la compilation.
NDBCluster est le moteur de stockage de MySQL MySQL Cluster qui implémente
des tables réparties sur plusieurs serveurs. Il est disponible avec les distributions
source depuis MySQL 4.1.2.
Ce chapitre décrit les différents moteurs de tables MySQL, hormis
InnoDB, qui est présenté dans le chapitre Chapitre 16, Tables InnoDB et
NDBCluster qui est présenté dans le chapitre Chapitre 17, Introduction à MySQL Cluster.
Lorsque vous créez une table, vous pouvez indiquer à MySQL le type de
table avec la clause ENGINE ou TYPE lors de la commande de
CREATE TABLE :
CREATE TABLE t (i INT) ENGINE = INNODB; CREATE TABLE t (i INT) TYPE = MEMORY;
ENGINE est le terme recommandé, mais il ne peut pas être utilisé avant
MySQL 4.0.18. TYPE est disponible depuis MySQL 3.23.0, la première
version de MySQL qui dispose de plusieurs moteurs de tables.
Si vous omettez l'option ENGINE ou TYPE,
le type de table par défaut sera utilisé. C'est généralement MyISAM.
Cela peut être changé en modifiant la variable système table_type.
Pour convertir une table d'un type à l'autre, utilisez la commande
ALTER TABLE, pour indiquer le nouveau type :
ALTER TABLE t ENGINE = MYISAM; ALTER TABLE t TYPE = BDB;
See Section 14.2.6, « Syntaxe de CREATE TABLE » and
Section 14.2.2, « Syntaxe de ALTER TABLE ».
Si vous essayez d'utiliser un moteur de stockage qui n'est pas compilé ou
qui est désactivé, MySQL créera une table de type MyISAM. Ce comportement
est pratique pour copier des tables entre serveurs MySQL qui supportent différents
moteurs. Par exemple, dans une architecture de réplication, votre serveur maître
supporte des tables transactionnelles, mais l'esclave n'utilise que des tables
non-transactionnelles, pour améliorer la vitesse.
Cette substitution automatique par une table de type MyISAM pour un
type de moteur indisponible peut être gênant pour un nouvel utilisateur
MySQL. En MySQL 4.1 et plus récent, une alerte est générée lorsque le type de
la table est modifié.
MySQL crée toujours un fichier .frm pour stocker le type de la table et
les informations de définition. Les données et les index de la table peuvent
être stockés ailleurs, en fonction du type de tables. Le serveur crée le fichier
.frm par dessus le moteur de stockage. Les moteurs peuvent créer des fichiers
supplémentaires, en fonction de leurs besoins.
Les avantages des tables transactionnelles (TST) sont :
Plus sûr. Même si MySQL crashe ou que vous avez un problème matériel, vous pouvez récupérer vos données, soit par un recouvrement automatique, soit à partir d'une sauvegarde combinée avec le log des transactions.
Vous pouvez combiner plusieurs commandes et les accepter toutes d'un
seul coup avec la commande COMMIT.
Vous pouvez utiliser ROLLBACK pour ignorer vos modifications
(si vous n'êtes pas en mode auto-commit).
Si une mise à jour échoue, tout vos changements seront annulés. (Avec les tables NTST tous les changements opérés sont permanents)
Gère mieux les accès concurrents si la table reçoit simultanément plusieurs lectures.
Notez que pour utiliser le moteur InnoDB en MySQL 3.23, vous devez
configurer au moins l'option de démarrage innodb_data_file_path.
En 4.0 et plus récent, InnoDB utilise les valeurs par défaut de la configuration,
si vous ne les spécifiez pas.
See Section 16.4, « Configuration InnoDB ».
Avantages des tables non-transactionnelles (NTST) :
Plus rapides puisqu'il n'y a pas de traitement des transactions.
Utilisent moins d'espace disque puisqu'il n'y a pas de traitement des transactions.
Utilisent moins de mémoires pour les mises à jour.
Vous pouvez combiner les tables TST et NTST dans la même requête pour obtenir le meilleur des deux types. Cependant, dans une transaction sans auto-validation, les modifications à une table non-transactionnelles seront toujours immédiatement enregistrés, et ne pourront pas être annulé.
© 1995-2005 MySQL AB. All rights reserved.
