En ce qui concerne MySQL, il serait difficile de comprendre MyISAM et InnoDB, qui sont deux des moteurs de stockage MySQL les plus connus et largement utilisés. Aujourd’hui, je vais vous parler de la différence entre MyISAM et InnoDB dans MySQL...
Qu’est-ce que MyISAM ?
MyISAM est le moteur de stockage par défaut pour le système de gestion de bases de données relationnelles MySQL (avant la version 5.5)。 Cette structure de stockage de tables MySQL étend de nombreuses fonctionnalités utiles à partir de l’ancien code ISAM. Dans la nouvelle version de MySQL, le moteur InnoDB remplace largement MyISAM en raison de ses avantages en termes de transactions, d’intégrité référentielle et de concurrence accrue. Chaque table MyISAM correspond à trois fichiers sur le disque dur. Les trois fichiers portent le même nom de fichier, mais des extensions différentes pour indiquer leur usage de type : le fichier .frm contient la définition de la table, mais ce fichier ne fait pas partie du moteur MyISAM, mais du serveur ; .MYD contient les données de la table ; .MYI est le fichier index de la table.
Qu’est-ce qu’InnoDB ?
InnoDB est un autre moteur de stockage pour MySQL, et la nouvelle version de la norme publiée par MySQL AB est incluse dans tous les paquets d’installation binaire.à partir de 5.5 comme moteur de stockage par défaut。 Ses avantages par rapport aux autres moteurs de stockage sont la prise en charge des transactions compatibles ACID (similaire à PostgreSQL) et l’intégrité des paramètres (c’est-à-dire la prise en charge des clés étrangères).
Oracle Corporation a acquis Innobase en octobre 2005. Innobase utilise une double authentification. Il est distribué via GNU et permet également à d’autres groupes souhaitant intégrer InnoDB dans des logiciels commerciaux d’obtenir une licence.
Les moteurs de stockage les plus populaires sont MyISAM et InnoDB. Les principales différences entre MyISAM et InnoDB concernent la performance et le contrôle des transactions. MyISAM est une implémentation étendue de la première ISAM (Indexed Sequential Access Method, ISAM n’est plus prise en charge après MySQL 5.0), ISAM est conçue pour gérer des situations où la fréquence de lecture est bien supérieure à la fréquence d’écriture, donc ISAM et MyISAM ultérieur ne prennent pas en compte le support des choses, excluent TPM, n’ont pas besoin d’enregistrements de transaction, l’efficacité des requêtes ISAM est considérable, et la consommation mémoire est très faible. MyISAM hérite de ces avantages tout en restant à jour avec le grand nombre de nouvelles fonctionnalités utiles et d’outils associés. Par exemple, en tenant compte du contrôle de la concurrence, des verrous au niveau de la table sont fournis, et bien que MyISAM lui-même ne supporte pas la tolérance aux pannes, il peut être utilisé pour récupérer des pannes via myisamchk. Et puisque MyISAM utilise ses propres fichiers de stockage indépendants (fichier de données MYD et fichier index MYI) pour chaque table, il est très pratique de sauvegarder et de restaurer (la copie en remplacement suffit), et il supporte également la récupération en ligne. Comparé à d’autres moteurs de stockage, MyISAM propose la plupart des outils pour vérifier et réparer les tables. Les tables MyISAM peuvent être compressées et prennent en charge la recherche en texte entier. Ils ne sont pas sécurisés pour les transactions, et ils ne prennent pas en charge les clés étrangères, donc si votre application ne nécessite pas de transactions et ne gère que les opérations CRUD de base, alors MyISAM est la solution à suivre. InnoDB est conçu pour des situations de lecture et d’écriture à forte concurrence concurrente, utilisant le MVCC (Multi-Version Concurrency Control) et des verrous au niveau ligne pour fournir un support des transactions conformes à ACID. InnoDB prend en charge l’intégrité des références de clé étrangère et dispose de capacités de récupération de pannes. De plus, les performances d’InnoDB sont en réalité assez bonnes, notamment lors du traitement de grandes quantités de données, en termes officiels : l’efficacité du processeur d’InnoDB est incomparable à celle d’autres moteurs de stockage relationnel basé sur disque. Cependant, la sauvegarde et la récupération d’InnoDB sont un peu plus problématiques, sauf si vous utilisez le support multi-tablespace fourni par la version 4.1 ou ultérieure, car contrairement à MyISAM, les fichiers de données d’InnoDB ne correspondent pas indépendamment à chaque table. À la place, l’espace de table partagé est utilisé, et la méthode simple de réécriture de copie ne lui convient pas, et les données doivent être restaurées après l’arrêt de MYSQL. L’utilisation de tablespaced par table fait correspondre chaque table à un fichier d’espace de table distinct, la situation est beaucoup plus simple. Il présente les mêmes caractéristiques que les types BDB, et ils prennent également en charge les clés étrangères. Les tables InnoDB sont rapides et offrent des fonctionnalités plus riches que BDB, donc elles sont recommandées si vous avez besoin d’un moteur de stockage sécurisé sur le plan transactionnel.
En général, InnoDB est un bon choix si le support des transactions est nécessaire et possède une fréquence élevée de lecture et d’écriture simultanée. BDB peut être envisagé si la fréquence des lectures et écritures concurrentes n’est pas élevée, mais BDB ne sera plus pris en charge dans MySQL 5.1 et versions ultérieures. Cette option a disparu
Par défaut, les transactions InnoDB sont ouvertes (activer l’autocommit = 0), ce qui signifie qu’à chaque insertion d’un enregistrement, la table InnoDB la traitera comme une transaction distincte. Donc, si nous insérons 10 000 enregistrements et ne fermons pas la transaction, alors la table de type InnoDB la traitera comme 10 000 transactions, et le temps total d’insertion à ce moment est énorme, à ce moment-là, nous devons d’abord désactiver la transaction puis l’insérer, donc la vitesse sera très rapide. Quant au tas et au BDB (base de données Berkeley), relativement parlant, le taux d’intrusion n’est pas aussi bon que pour les deux précédents, mais dans certains cas, Le moteur de stockage Heap reste très applicable, il stocke les données en mémoire, et est extrêmement rapide car il n’y a pas d’E/S disque en attente. Mais comme il s’agit d’un moteur de stockage mémoire, toute modification disparaîtra après le redémarrage du serveur. Le tas est un excellent endroit pour utiliser BDB pour les tests, car c’est le premier moteur de stockage sécurisé transactionnellement de MySQL. Construit sur la base de la bibliothèque de bases de données Berkeley, il est également sécurisé sur le plan transactionnel, mais BDB n’est évidemment pas aussi populaire qu’InnoDB, car la plupart des moteurs de stockage MySQL qui prennent en charge les transactions recherchent également des moteurs MVCC ou verrouillage au niveau des lignes, tandis que BDB ne prend en charge que le verrouillage au niveau de la page.
Moteur InnoDB
InnoDB est un moteur de stockage transactionnel qui prend en charge les rollbacks et est conçu pour fournir des services haute performance lors du traitement de grandes quantités de données, et il établit des pools de tampon en mémoire à l’exécution pour mettre en mémoire tampon les données et les index.
Avantages du moteur InnoDB :
1. Prise en charge du traitement des transactions et des fonctionnalités de transaction ACID ;
2. Quatre niveaux d’isolation de la norme SQL sont réalisés ;
3. Supporter les contraintes de verrouillage au niveau des lignes et des clés étrangères ;
4. Vous pouvez utiliser les journaux de transactions pour la récupération de données.
5. Le niveau de verrouillage est un verrou de rangée, qui convient à des modifications fréquentes de tables avec une forte concurrence, et une forte concurrence est meilleure que MyISAM. L’inconvénient est que la consommation du système est importante.
6. L’index ne se contente pas de mettre en cache lui-même, mais aussi les données, ce qui nécessite plus de mémoire que MyISAM.
Inconvénients du moteur InnoDB :
Comme il n’enregistre pas le nombre de lignes dans la table, l’ensemble du tableau est balayé en utilisant les statistiques COUNT.
Moteur MyISAM
MyISAM est le moteur par défaut avant MySQL 5.5.5 et est conçu pour lire rapidement.
Avantages du moteur MyISAM :
1. Lecture haute performance ;
2. Parce qu’il enregistre le nombre de lignes dans le tableau, l’ensemble du tableau ne sera pas balayé lors de l’utilisation des statistiques COUNT ;
Inconvénients du moteur MyISAM :
1. Le niveau de la serrure est une serrure de table, et l’avantage de la serrure de montre est que la hauteur est petite et la serrure est rapide ; Les inconvénients sont que la granularité du verrou est grande, la probabilité d’impulsion du verrou est élevée et la capacité de concurrence est faible, ce qui convient aux services basés sur requête.
2. Ce moteur ne prend pas en charge les transactions ni les clés étrangères.
3. Les opérations INSERT et UPDATE doivent verrouiller toute la table ;
4. Il stocke le nombre de lignes dans la table, donc lorsque SELECT COUNT(*) depuis la table, il suffit de lire directement les valeurs enregistrées sans parcourir toute la table.
Scénarios applicables
MyISAM convient à : (1) effectuer de nombreux calculs de comptage ; (2) Insertion peu fréquente et requêtes très fréquentes ; (3) Il n’y a pas d’affaires.
InnoDB convient aux : (1) exigences ou transactions élevées de fiabilité ; (2) Les mises à jour et requêtes de table sont assez fréquentes, et le risque de verrouillage de table est relativement élevé.
Comparaison de tableaux
| Propriétés | MyISAM | Tas | BDB | InnoDB | | Transactions | Non supporté | Non supporté | Supporter | Supporter | | Granularité des verrous | Verrouillage de table | Verrouillage de table | Page Lock (page, 8 Ko) | Serrure | | stockage | Fichiers scindés | En mémoire | Un fichier par tableau | Espace de table | | Niveau d’isolement | non | non | Lire Engagé | Tous | | Format portable | être | N/A | non | être | | Complétude des citations | non | non | non | être | | Clé primaire de données | non | non | être | être | | MySQL met en cache les enregistrements de données | non | Oui | Oui | Oui | | Utilisabilité | Version complète | Version complète | MySQL-Max | Version complète |
Quelques différences de détails
1. InnoDB ne prend pas en charge les index de type FULLTEXT, ce qui est supporté depuis MySQL 5.6 (expérimental).
2. InnoDB ne sauvegarde pas le nombre précis de lignes de la table, c’est-à-dire que lors de l’exécution de select count() depuis la table, InnoDB doit scanner toute la table pour calculer le nombre de lignes disponibles, mais MyISAM n’a qu’à simplement lire le nombre de lignes enregistrées. Notez que lorsque l’instruction count() contient une condition where, l’opération est la même pour les deux tables.
3. Pour les champs de AUTO_INCREMENT type, InnoDB doit contenir un index contenant uniquement ce champ, mais dans la table MyISAM, vous pouvez créer un index conjoint avec d’autres champs.
4. Lorsque SUPPRIMER DE la table, InnoDB ne recrée pas la table, mais la supprime ligne par ligne.
5. L’opération LOAD TABLE FROM MASTER ne fonctionne pas pour InnoDB, la solution consiste d’abord à changer la table InnoDB pour la table MyISAM, à importer les données, puis à la changer pour la table InnoDB, mais elle n’est pas applicable à la table qui utilise des fonctionnalités InnoDB supplémentaires (comme des clés étrangères).
6. De plus, le verrouillage de ligne de la table InnoDB n’est pas absolu ; si MySQL ne peut pas déterminer la plage à analyser lors de l’exécution d’une instruction SQL, la table InnoDB verrouillera également toute la table.
7. InnoDB ne prend pas en charge l’indexation du texte intégral, tandis que MyISAM le supporte. L’indexation du texte intégral consiste à créer un index en ordre inverse de chaque mot en char, varchar et texte (sauf pour les mots stop). L’index en texte intégral de MyISAM est en réalité inutile, car il ne supporte pas la segmentation des mots chinois, et doit être écrit dans la table de données par l’utilisateur après la segmentation des mots, et les mots avec moins de 4 caractères chinois seront ignorés comme les mots stop.
|