VI. Le moteur Merge▲
- Licence : GPL
- Version de MySQL : 3.23.25
- Type : Autre
- Domaines d'application : Administration de base de données.
- Information : Documentation officielle du moteur Merge
VI-A. Description▲
Une table MERGE est un ensemble de tables MyISAM possédant la même structure ainsi que le même jeu de caractères.
Il est comparable à l'opérateur ensembliste UNION, mais inclus dans le moteur lui-même et non pas dans une requête, ce qui garantit une meilleure optimisation. L'intérêt réside surtout dans le fait qu'une table MyISAM très volumineuse peut être coupée en plusieurs tables ou tables annexes.
L'efficacité est renforcée sur des tables dont les données sont compressées et en lecture seule.
L'intérêt peut être d'ordre stratégique. Imaginons qu'il existe une table par région. Des utilisateurs peuvent avoir les droits sur une table mais pas sur d'autres. Par contre, le DBA peut gérer toutes les tables des régions en une seule et ceci de manière complètement transparente pour les autres utilisateurs.
VI-B. Exemple d'utilisation▲
Partons d'un exemple où des logs sont entrés, à raison d'une table de logs par mois. Ces différentes tables (ou tables annexes) sont en lecture seule et peuvent être réunies en une seule grâce au moteur MERGE. Il est à noter aussi, que pour des opérations de maintenances, il est plus rapide de les exécuter sur plusieurs petits fichiers (une table MyISAM = un fichier) que sur un fichier qui possède un gros volume de données.
CREATE
TABLE
LogJanvier2007 (
idlog INT
NOT
NULL
AUTO_INCREMENT
PRIMARY_KEY,
log
VARCHAR
(
255
))
;
CREATE
TABLE
LogFevrier2007 (
idlog INT
NOT
NULL
AUTO_INCREMENT
PRIMARY_KEY,
log
VARCHAR
(
255
))
CREATE
TABLE
Log2007(
idlog INT
NOT
NULL
AUTO_INCREMENT
PRIMARY_KEY,
log
VARCHAR
(
255
))
TYPE
=
MERGE
UNION
=(
LogJanvier2007, LogFevrier2007)
INSERT_METHODE =
LAST
;
)
INSERT
INTO
LogJanvier2007(
log
)
VALUES
(
'Boumbo; 10-01-2007 10:12:00; External'
)
,
(
'Sylvianne; 11-01-2007 14:12:54; External'
)
,
(
'Albertus;15-01-2007 23:01:20; Internal'
)
;
INSERT
INTO
LogFevrier2007(
log
)
VALUES
(
'Choulse; 14-02-2007 8:12:56; External'
)
,
(
'Prospere; 20-02-2007 11:25:17; Internal'
)
,
(
'Gorgio;20-02-2007 11:26:32; External'
)
;
SELECT
*
Log2007
------------------------------------------------
|
idLog |
Log
|
1
|
David; 10
-
01
-
2007
10
:12
:00
; External
|
2
|
Sylvianne; 11
-
01
-
2007
14
:12
:54
; External
|
3
|
Albertus;15
-
01
-
2007
23
:01
:20
; Internal
|
1
|
Choulse; 14
-
02
-
2007
8
:12
:56
; External
|
2
|
Babacou; 20
-
02
-
2007
11
:25
:17
; Internal
|
3
|
Gorgio;20
-
02
-
2007
11
:26
:32
; External
Il est à noter que les "identifiants uniques" ne le sont pas dans une table de type MERGE, mais le sont dans chacune des tables annexes. Les insertions de données (INSERT) sont possibles dans ce type de table, à condition de spécifier dans quelle table annexe les données doivent être insérées.
C'est possible grâce à l'option INSERT_METHOD spécifiée lors de la création de la table.
CREATE
TABLE
Log2007(
idlog INT
NOT
NULL
AUTO_INCREMENT
PRIMARY_KEY,
log
VARCHAR
(
255
))
TYPE
=
MERGE
UNION
=(
LogJanvier2007, LogFevrier2007)
INSERT_METHODE =
LAST
;)
;
Il y a 3 paramètres pour l'option INSERT_METHOD :
- NO : Pour interdire toute création d'enregistrement via la table MERGE
- FIRST : Les enregistrements seront inscrits dans la première table définie dans la liste UNION.
- LAST : Les enregistrements seront inscrits dans la dernière table définie dans la liste UNION.
S'il est nécessaire d'insérer des enregistrements dans une table spécifique, alors l'opération devra être directement faite sur la table annexe.
VI-C. Fonctionnalités▲
- Vu que les tables sont de type MyISAM, elles héritent des mêmes avantages
- La maintenance des tables annexes est facilitée par leur taille
- La mise en place (facile à faire et à défaire)
- MERGE permet de mettre en place un partitionnement horizontal pour les versions antérieures de MySQL inférieures à la 5.1. A partir de cette dernière version, MySQL prend en charge le partitionnement horizontal quel que soit le moteur de stockage.
- La rapidité d'exécution
- L'obligation d'utiliser les tables de type MyISAM et donc les inconvénients de ce moteur
- Les index ne sont pas uniques.
- Le nombre élevé de fichiers sur la machine. Etant donné que le moteur MERGE utilise des tables de type MyISAM, chaque table annexe correspond à un fichier. S'il y a une table annexe par mois, il y aura donc 12 fichiers.
- La recherche par clés. Obligation de parcourir le catalogue de chaque table, ce qui ralentit le processus
VI-D. Conclusion▲
Le moteur MERGE permet d'administrer une base de données plus finement en termes de gestion de performances du serveur, en termes de droits sur les tables ainsi qu'en termes de maintenance sur les tables.
L'impossibilité d'annexion de tables se trouvant en dehors de la base de données, et ce même via une vue, est pénalisante.