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.2 Tables assemblées MERGE
Les tables
MERGE
ont été ajoutée en MySQL version 3.23.25.
Ce type de table est aussi connu sous le nom de
MRG_MyISAM
. Le code
raisonnablement stable.
Une table
MERGE
est un groupe de tables
MyISAM
identiques qui
sont utilisées comme une seule. ``Identique'' signifie que toutes les tables
ont la même structure de colonnes et d'index. Vous ne pouvez pas regrouper des
tables qui ont des index dans un ordre différent. Toutefois, une ou plusieurs
tables peuvent être compressées avec
myisampack
.
myisampack
, le générateur de tables MySQL compressées .
Lorsque vous créez une table
MERGE
, MySQL crée deux fichiers sur le disque.
Les fichiers ont pour nom celui de la table, et ont un extension qui indique
le type de fichiers. Le fichier
.frm
stocke la définition de la table, et
le fichier
.MRG
contient les noms des tables qui doivent être utilisées.
Originalement, toutes les tables utilisées dans la même table
MERGE
devaient être dans la même base que la table
MERGE
. Cette restriction
a été levée en MySQL 4.1.1.
Pour le moment, vous avez simplement besoin des droits de
SELECT
,
UPDATE
et
DELETE
sur les tables que
vous avez rassemblé dans la table
MERGE
.
L'exemple suivant vous montre comme utiliser les tables
MERGE
:
mysql> CREATE TABLE t1 ( -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> message CHAR(20)); mysql> CREATE TABLE t2 ( -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> message CHAR(20)); mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1'); mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2'); mysql> CREATE TABLE total ( -> a INT NOT NULL AUTO_INCREMENT, -> message CHAR(20), INDEX(a)) -> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
|
Notez que la colonne
a
est indexée dans la table
MERGE
, mais elle
n'est pas déclarée comme
PRIMARY KEY
comme elle peut l'être dans les
tables
MyISAM
sous-jacente. C'est nécessaire car une table
MERGE
ne peut pas assurer l'unicité de valeurs à travers les tables.Après la création de la table
MERGE
, vous pouvez faire des commandes comme :
mysql> SELECT * FROM total; +---+---------+ | a | message | +---+---------+ | 1 | Testing | | 2 | table | | 3 | t1 | | 1 | Testing | | 2 | table | | 3 | t2 | +---+---------+
|
Pour redéfinir une table
MERGE
avec un autre groupe de tables
MyISAM
, vous pouvez faire ceci : Notez que vous pouvez aussi manipuler le fichier
.MRG
directement,
à l'extérieur du serveur MySQL :
shell> cd /mysql-data-directory/current-database shell> ls -1 t1 t2 > total.MRG shell> mysqladmin flush-tables
|
-
Effacez la table avec la commande
DROP
, puis recréez la.
-
Utilisez
ALTER TABLE tbl_name UNION=(...)
pour redéfinir les tables
regroupées.
-
Modifiez le fichier
.MRG
et utilisez la commande
FLUSH TABLE
sur
la table
MERGE
et toutes les tables sous-jacentes, pour forcer
le gestionnaire à relire la définition.
Les tables
MERGE
peuvent vous aider dans les situations suivantes :
-
Gérer facilement un jeu de tables d'historique. Par exemple, vous pourriez
placer les données de chaque mois dans un fichier séparé, en compresser
certains avec
myisampack
puis créer une table
MERGE
pour les utiliser.
-
Vous donner plus de vitesse. Vous pouvez répartir les grandes tables en lecture
seule dans différentes parties du disque. Une table
MERGE
bâtie de cette
façon peut être plus rapide qu'une grosse table (vous pouvez aussi et bien sûr,
utiliser un système RAID pour arriver aux mêmes avantages).
-
Effectuer des recherches plus efficaces. Si vous savez exactement ce que vous
recherchez, vous pouvez faire des recherches dans une seule des tables
individuelles pour les recherches, et utiliser la table
MERGE
pour les
autres opérations. Vous pouvez même avoir de nombreuses tables
MERGE
actives, qui partagent les même fichiers.
-
Des réparations plus efficaces. Il est plus facile de réparer les fichiers
individuels qui sont rassemblés dans une table
MERGE
que de réparer une
grande table.
-
Fusion instantanée de plusieurs tables en une seule. Une table
MERGE
utilise les index des tables individuelles. Il n'y a pas besoin de gérer un
seul index. Cela rend les tables
MERGE
très
rapides à faire ou défaire. Notez que vous devez spécifier
les définitions de clés lorsque vous créez la table
MERGE
!
-
Si vous avez un jeu de table que vous rassemblez dans une grande
à la demande ou pour un traitement batch, vous devriez utiliser une table
MERGE
. C'est bien plus rapide, et cela va vous faire économiser de l'espace
disque.
-
Contourner les limitations de taille du système d'exploitation.
-
Vous pouvez créer un alias ou un synonyme pour une table, en utilisant
simplement
MERGE
sur une seule. Il n'y a pas de coûts particulier
en performance (hormis quelques appels de fonctions indirects, et des
memcpy()
avant chaque lecture).
Les inconvénients des tables de type
MERGE
sont :
-
Vous devez utiliser des tables
MyISAM
identiques pour faire une table
MERGE
.
-
MERGE
utilise plus de pointeurs de fichiers. Si vous utilisez
une table
MERGE
qui couvre 10 tables et que 10 utilisateurs l'utilisent,
vous consommez 10*10 + 10 pointeurs de fichiers (10 fichiers de données, et
10 utilisateurs avec 10 fichiers d'index).
-
Les lectures de clés sont plus lentes. Lorsque vous faîtes une lecture sur
une clé, le gestionnaire
MERGE
doit faire une lecture dans tous les
fichiers d'index des tables sous-jacentes, pour vérifier lequel est le plus
proche de la valeur recherchée. Si vous faîtes une lecture du type
"lit le suivant", le gestionnaire de table assemblée doit rechercher dans tous
les buffers de clés pour la trouver. Uniquement lorsqu'un buffer clé est complet,
doit il lire le prochain bloc. Cela rend l'accès aux clés
MERGE
bien plus
lent que les recherches
eq_ref
, mais pas aussi lent que les recherches de type
ref
.
Voyez la section Syntaxe de
EXPLAIN
(Obtenir des informations
SELECT
) pour plus d'informations sur
eq_ref
et
ref
.
Sommaire :
|