Les moteurs de stockage sont des composants MySQL qui gèrent les opérations SQL pour différents types de tables. InnoDB
est le moteur de stockage par défaut et le plus polyvalent, et Oracle recommande de l’utiliser pour les tables, sauf dans des cas d’utilisation spécialisés. (L’instruction CREATE TABLE
de MySQL 8.0 crée des tables InnoDB
par défaut.)
MySQL Server utilise une architecture de moteur de stockage enfichable qui permet de charger et de décharger des moteurs de stockage dans un serveur MySQL en cours d’exécution.
Pour déterminer quels moteurs de stockage votre serveur prend en charge, utilisez l’instruction SHOW ENGINES
. La valeur de la colonne Support
indique si un moteur peut être utilisé. Une valeur de YES
, NO
ou DEFAULT
indique qu’un moteur est disponible, non disponible ou disponible et actuellement défini comme moteur de stockage par défaut.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Ce chapitre couvre les cas d’utilisation des moteurs de stockage MySQL à usage spécial. Il ne couvre pas le moteur de stockage par défaut InnoDB
ou le moteur de stockage NDB
qui sont traités dans le chapitre 15, Le moteur de stockage InnoDB et le chapitre 23, MySQL NDB Cluster 8.0. Pour les utilisateurs avancés, il contient également une description de l’architecture du moteur de stockage enfichable (voir Section 16.11, » Présentation de l’architecture du moteur de stockage MySQL « ).
Pour des informations sur les fonctionnalités proposées dans les binaires commerciaux de MySQL Server, consultez les éditions MySQL, sur le site Web de MySQL. Les moteurs de stockage disponibles peuvent dépendre de l’édition de MySQL que vous utilisez.
Pour les réponses aux questions fréquemment posées sur les moteurs de stockage MySQL, consultez la section A.2, « FAQ MySQL 8.0 : Moteurs de stockage ».
Moteurs de stockage supportés par MySQL 8.0
-
InnoDB
: Le moteur de stockage par défaut dans MySQL 8.0.InnoDB
est un moteur de stockage à sécurité transactionnelle (conforme ACID) pour MySQL, qui dispose de fonctionnalités de commit, rollback et crash-recovery pour protéger les données des utilisateurs. Le verrouillage de niveau ligne deInnoDB
(sans escalade vers des verrous de granularité plus grossière) et les lectures cohérentes non verrouillées de style Oracle augmentent la concurrence et les performances multi-utilisateurs.InnoDB
stocke les données utilisateur dans des index en cluster afin de réduire les E/S pour les requêtes courantes basées sur les clés primaires. Pour maintenir l’intégrité des données,InnoDB
prend également en charge les contraintes d’intégrité référentielleFOREIGN KEY
. Pour plus d’informations surInnoDB
, voir le chapitre 15, Le moteur de stockage InnoDB. -
MyISAM
: Ces tables ont un faible encombrement. Le verrouillage au niveau de la table limite les performances dans les charges de travail en lecture/écriture, il est donc souvent utilisé dans les charges de travail en lecture seule ou en lecture principale dans les configurations Web et d’entreposage de données. -
Memory
: stocke toutes les données en RAM, pour un accès rapide dans les environnements qui nécessitent des consultations rapides de données non critiques. Ce moteur était auparavant connu sous le nom de moteurHEAP
. Ses cas d’utilisation sont en diminution ;InnoDB
avec sa zone de mémoire tampon fournit un moyen polyvalent et durable de garder la plupart ou toutes les données en mémoire, etNDBCLUSTER
fournit des recherches rapides de valeurs clés pour d’énormes ensembles de données distribuées. -
CSV
: Ses tables sont en fait des fichiers texte avec des valeurs séparées par des virgules. Les tables CSV vous permettent d’importer ou de vider des données au format CSV, pour échanger des données avec des scripts et des applications qui lisent et écrivent ce même format. Comme les tables CSV ne sont pas indexées, vous conservez généralement les données dans des tablesInnoDB
pendant le fonctionnement normal, et n’utilisez les tables CSV que pendant l’étape d’importation ou d’exportation. -
Archive
: Ces tables compactes et non indexées sont destinées à stocker et à récupérer de grandes quantités d’informations historiques, archivées ou d’audit de sécurité rarement référencées. -
Blackhole
: Le moteur de stockage Blackhole accepte mais ne stocke pas les données, de manière similaire au périphérique Unix/dev/null
. Les requêtes renvoient toujours un ensemble vide. Ces tables peuvent être utilisées dans des configurations de réplication où les instructions DML sont envoyées aux serveurs de réplique, mais où le serveur source ne conserve pas sa propre copie des données. -
NDB
(également connu sous le nom deNDBCLUSTER
) : Ce moteur de base de données en grappe est particulièrement adapté aux applications qui exigent le plus haut degré possible de temps de fonctionnement et de disponibilité. -
Merge
: Permet à un DBA ou un développeur MySQL de regrouper logiquement une série de tablesMyISAM
identiques et de les référencer comme un seul objet. Bon pour les environnements VLDB tels que l’entreposage de données. -
Federated
: Offre la possibilité de relier des serveurs MySQL séparés pour créer une base de données logique à partir de plusieurs serveurs physiques. Très bon pour les environnements distribués ou de data mart. -
Example
: Ce moteur sert d’exemple dans le code source de MySQL qui illustre comment commencer à écrire de nouveaux moteurs de stockage. Il présente principalement un intérêt pour les développeurs. Le moteur de stockage est un « stub » qui ne fait rien. Vous pouvez créer des tables avec ce moteur, mais aucune donnée ne peut y être stockée ou récupérée.
Vous n’êtes pas limité à l’utilisation du même moteur de stockage pour un serveur ou un schéma entier. Vous pouvez spécifier le moteur de stockage pour n’importe quelle table. Par exemple, une application peut utiliser principalement des tables InnoDB
, avec une table CSV
pour l’exportation des données vers une feuille de calcul et quelques tables MEMORY
pour les espaces de travail temporaires.
Choix d’un moteur de stockage
Les différents moteurs de stockage fournis avec MySQL sont conçus en fonction de différents cas d’utilisation. Le tableau suivant fournit un aperçu de certains moteurs de stockage fournis avec MySQL, avec des notes de clarification à la suite du tableau.
Tableau 16.1 Résumé des fonctionnalités des moteurs de stockage
Fonctionnalité | MyISAM | Mémoire | InnoDB | Archive | NDB | |
---|---|---|---|---|---|---|
B-.index arborescents | Oui | Oui | Oui | Non | Non | |
Sauvegarde/récupération ponctuelle-.temps (note 1) | Oui | Oui | Oui | Oui | Oui | |
Support des bases de données en grappe | Non | Non | Non | Non | Non | Oui |
Index groupés | Non | Non | Oui | Non | Non | |
Données compressées | Oui (note 2) | Non | Oui | Oui | Non | |
Caches de données | Non | N/A | Oui | Non | Oui | |
Données cryptées | Oui (note 3) | Oui (note 3) | Oui (note 4) | Oui (note 3) | Oui (note 3) | |
Support des clés étrangères | Non | Non | Oui | Non | Oui (note 5) | |
Indices de recherche en texte intégral | Oui | Non | Oui (note 6) | Non | Non | |
Géospatial support des types de données | Oui | Non | Oui | Oui | Oui | |
Indice géospatial support | Oui | Non | Oui (note 7) | Non | Non | |
Indices de hachage | Non | Oui | Non (note 8) | Non | Oui | |
Index caches | Oui | N/A | Oui | Non | Oui | |
Granularité de verrouillage | Table | Table | Row | Row | Row | |
MVCC | No | No | Oui | Non | No | |
Support de la réplication (note 1) | Oui | Limité (note 9) | Oui | Oui | Oui | Oui |
Limites de stockage | 256TB | RAM | 64TB | None | 384EB | |
T-indices arborescents | Non | Non | Non | Non | Oui | |
Transactions | Non | Non | Oui | Non | Non | Oui |
Mise à jour des statistiques du dictionnaire de données | Oui | Oui | Oui | Oui | Oui |
Notes :
1. Implémenté dans le serveur, plutôt que dans le moteur de stockage.
2. Les tables MyISAM compressées sont prises en charge uniquement lors de l’utilisation du format de ligne compressé. Les tables utilisant le format de ligne compressé avec MyISAM sont en lecture seule.
3. Implémenté dans le serveur via des fonctions de chiffrement.
4. Implémenté dans le serveur via des fonctions de chiffrement ; Dans MySQL 5.7 et plus, le chiffrement des données au repos est pris en charge.
5. La prise en charge des clés étrangères est disponible dans MySQL Cluster NDB 7.3 et les versions ultérieures.
6. La prise en charge des index FULLTEXT est disponible dans MySQL 5.6 et les versions ultérieures.
7. La prise en charge de l’indexation géospatiale est disponible dans MySQL 5.7 et les versions ultérieures.
8. InnoDB utilise les index de hachage en interne pour sa fonctionnalité Adaptive Hash Index.
9. Voir la discussion plus loin dans cette section.
9.