Le moteur de tables MyISAM
<<<
Tables assemblées MERGE Tables HEAP
>>>

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 :

<< Tables assemblées MERGE >>
Le moteur de tables MyISAM Types de tables MySQL Tables HEAP