架构师_程序员_码农网

N Récupérer le mot de passe
S'inscrire

QQ登录

Une seule étape pour commencer

Recherche
Vue :6760|Réponse : 0
打印 上一主题 下一主题

[ Information]Moteur de stockage de base de données MySQL Différence entre MyISAM et InnoDB

[Copier le lien]
MyISAM et InnoDB
L 跳转到指定楼层
propriétaire
发表于 2020-4-13 09:53:49|只看该作者回帖奖励 | Mode lecture
MyISAM et InnoDB sont deux des moteurs de stockage MySQL les plus connus et les plus utilisés. Aujourd'hui, nous allons parler de la différence entre MyISAM et InnoDB dans MySQL et du choix de ...

Qu'est-ce que MyISAM ?

MyISAM est le moteur de stockage par défaut du système de gestion de bases de données relationnelles MySQL (avant la version 5.5). Cette structure de stockage de table MySQL étend l'ancien code ISAM avec de nombreuses fonctionnalités utiles. Dans les versions plus récentes de MySQL, le moteur InnoDB a commencé à remplacer largement MyISAM en raison de ses avantages pour les transactions, l'intégrité référentielle et une concurrence plus élevée.
Chaque table MyISAM correspond à trois fichiers sur votre disque dur. Ces trois fichiers ont le même nom, mais des extensions différentes pour indiquer leur type d'utilisation : 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 ; et .MYI est le fichier d'index pour la table.

Qu'est-ce que InnoDB ?

InnoDB est un autre moteur de stockage de MySQL, qui est actuellement le standard pour les nouvelles versions de MySQL AB. Il est inclus dans toutes les installations binaires et est le moteur de stockage par défaut après la version 5.5. Ses avantages par rapport aux autres moteurs de stockage sont qu'il prend en charge les transactions compatibles ACID (similaires à 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 licence à double authentification. Il est distribué sous la distribution GNU, ce qui permet également à d'autres groupes qui souhaitent incorporer 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 se situent au niveau des performances et du contrôle des transactions. myISAM est une implémentation étendue de l'ancienne ISAM (Indexed Sequential Access Method, qui n'est plus prise en charge par MySQL après la version 5.0). ISAM a été conçu pour être adapté au traitement de la fréquence des lectures est beaucoup plus grande que la fréquence des écritures une telle situation, de sorte que ISAM et plus tard MyISAM ne sont pas considérés comme supportant les choses, excluant le TPM, n'ont pas besoin d'enregistrements de transaction, l'efficacité des requêtes ISAM est considérable, et très peu de consommation de mémoire.
MyISAM a hérité de ces avantages tout en progressant avec le temps pour fournir un grand nombre de nouvelles fonctionnalités pratiques et d'outils connexes. Par exemple, en ce qui concerne le contrôle de la concurrence, des verrous au niveau des tables sont fournis, et bien que MyISAM lui-même ne prenne pas en charge la tolérance aux pannes, la récupération des pannes peut être effectuée par l'intermédiaire de myisamchk. Et comme MyISAM utilise pour chaque table ses propres fichiers de stockage indépendants (fichiers de données MYD et fichiers d'index MYI), la sauvegarde et la récupération sont très pratiques (copie et écrasement possibles), mais la récupération en ligne est également prise en charge. Par rapport à d'autres moteurs de stockage, MyISAM dispose de la plupart des outils de vérification et de réparation des tables. Les tables MyISAM peuvent être compressées et prennent en charge la recherche en texte intégral. Elles ne sont pas sûres pour les transactions et ne prennent pas en charge les clés étrangères. Si votre application n'est pas transactionnelle et ne traite que des opérations CRUD de base, MyISAM est le meilleur choix.
InnoDB est conçu pour des lectures et des écritures hautement concurrentes, utilisant MVCC (Multi-Version Concurrency Control) et le verrouillage au niveau des lignes pour fournir un support transactionnel conforme à ACID. InnoDB supporte l'intégrité référentielle des clés étrangères, avec des capacités de failback. En outre, les performances d'InnoDB sont effectivement bonnes, en particulier dans le cas du traitement de grandes quantités de données, selon les termes officiels : l'efficacité de l'unité centrale d'InnoDB n'est pas comparable à celle d'autres moteurs de stockage de bases de données relationnelles sur disque. Cependant, la récupération des sauvegardes InnoDB pose quelques problèmes, à moins que vous n'utilisiez la version 4.1 ou une version ultérieure du support Mulit-tablespace, parce qu'InnoDB et MyISAM sont différents, ses fichiers de données ne correspondent pas indépendamment à chaque table. Au lieu de cela, il utilise un tablespace partagé, et la méthode de copie et d'écrasement simple ne lui est pas applicable, et les données doivent être récupérées après l'arrêt de MYSQL. L'utilisation de tablespaces par tabled, qui dispose d'un fichier tablespace distinct pour chaque table, est beaucoup plus simple. Les tables InnoDB sont très rapides et possèdent un ensemble de caractéristiques plus riche que les BDB. Si vous avez besoin d'un moteur de stockage sûr pour les transactions, il est donc recommandé de l'utiliser.

En général, si vous avez besoin d'un support de transaction et que vous avez une fréquence élevée de lectures et d'écritures simultanées, InnoDB est un bon choix. Si vous n'avez pas une fréquence de lecture/écriture simultanée élevée, vous pouvez envisager BDB, mais comme le support BDB ne sera plus disponible dans MySQL 5.1 et les versions ultérieures, cette option n'est plus disponible. Cette option n'est plus disponible.

Les transactions InnoDB sont activées par défaut (set autocommit = 0), ce qui signifie que chaque fois qu'un enregistrement est inséré, la table de type InnoDB le traite comme une transaction distincte. Ainsi, si nous insérons 10 000 enregistrements et que nous ne fermons pas la transaction, la table de type InnoDB la traitera comme 10 000 transactions afin de gérer le temps total d'insertion, qui est très long, car il faut d'abord désactiver la transaction, puis l'insérer, de sorte que la vitesse de la table de type InnoDB est inférieure à celle de la table de type Heap et BDB (Berkeley DB). En ce qui concerne le Heap et le BDB (Berkeley DB), relativement parlant, la popularité n'est pas aussi bonne que les deux premiers, mais dans certains cas, il est encore tout à fait applicable Le moteur de stockage Heap est de stocker les données dans la mémoire, parce qu'il n'y a pas d'attente pour l'I/O du disque, la vitesse est extrêmement rapide. Cependant, comme il s'agit d'un moteur de stockage en mémoire, toutes les modifications apportées seront perdues après le redémarrage du serveur. BDB est le premier moteur de stockage à sécurité transactionnelle pour MySQL. Construit sur la bibliothèque de base de données Berkeley DB, il est également transactionnellement sûr, mais BDB est nettement moins populaire qu'InnoDB car la plupart des personnes qui recherchent un moteur de stockage transactionnel dans MySQL recherchent également un moteur de stockage qui supporte le MVCC ou le verrouillage au niveau de la ligne, alors que BDB ne supporte que le verrouillage au niveau de la page.

Moteur InnoDB

InnoDB est un moteur de stockage transactionnel qui prend en charge le rollback et qui est conçu pour offrir des performances élevées lors du traitement de grandes quantités de données. Il crée des pools de tampons en mémoire au moment de 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, caractéristiques des transactions ACID ;

2. Mise en œuvre des quatre niveaux d'isolation de la norme SQL ;

3. Prise en charge des verrouillages au niveau des lignes et des contraintes de clés étrangères ;

4, vous pouvez utiliser le journal des transactions pour la récupération des données.

5, le niveau de verrouillage pour les verrous de ligne, l'avantage des verrous de ligne est applicable à la haute concurrence des modifications fréquentes des tables, la haute concurrence est meilleure que la performance de MyISAM. l'inconvénient est que le système consomme plus.

6, l'index n'est pas seulement un cache, mais aussi un cache de données, ce qui nécessite plus de mémoire que MyISAM.

Inconvénients du moteur InnoDB

Parce qu'il n'enregistre pas le nombre de lignes de la table, l'utilisation des statistiques COUNT entraîne le balayage de la table entière.

Moteur MyISAM

MyISAM est le moteur par défaut dans MySQL avant la version 5.5.5, et il est conçu pour des lectures rapides.

Avantages du moteur MyISAM

1. lecture très performante

2. parce qu'il stocke le nombre de lignes dans la table, la table entière n'est pas parcourue lors de l'utilisation des statistiques COUNT ;

Inconvénients du moteur MyISAM

1. niveau de verrouillage pour les verrous de table, les avantages des verrous de table sont la faible surcharge, le verrouillage rapide ; les inconvénients sont la granularité des verrous, la probabilité que des impulsions de verrouillage se produisent est plus élevée, la capacité d'adaptation à la concurrence est faible, ce moteur convient aux activités basées sur les requêtes.

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 l'ensemble de la table ;

4, il stocke le nombre de lignes de la table, de sorte que SELECT COUNT(*) FROM TABLE n'a besoin que de lire directement la valeur qui a été enregistrée sans qu'il soit nécessaire d'effectuer un balayage complet de la table.

Scénarios applicables

MyISAM convient : (1) pour effectuer de nombreux calculs de comptage ; (2) pour des insertions peu fréquentes et des requêtes très fréquentes ; (3) pour l'absence de transactions.

InnoDB convient pour : (1) des exigences de fiabilité plus élevées ou des transactions nécessaires ; (2) des mises à jour de table et des requêtes assez fréquentes, et une possibilité de verrouillage de la table relativement importante.

Comparaison des tables

Attributs MyISAM Tas BDB InnoDB
Transaction Non pris en charge Non supporté Pris en charge Pris en charge
Granularité du verrouillage Verrous de table Verrouillage de table Verrouillage de page (page, 8 Ko) Verrouillage de ligne
Stockage Fichier fractionné En mémoire Un fichier par table Espace de tables
Niveau d'isolation Aucun Aucun Lecture engagée Tous
Format portable Format portable N/A Non Non
Intégrité référentielle Non Non Non Non
Clé primaire des données Non Non Non Non
Enregistrements de données en cache MySQL Non Oui Oui Oui
Disponibilité Version complète Version complète MySQL-Max Version complète


Quelques différences détaillées


1) InnoDB ne supporte pas l'index de type FULLTEXT, qui a été supporté par MySQL après la version 5.6 (expérimental).

2、InnoDB ne sauvegarde pas le nombre de lignes d'une table, c'est-à-dire que lors de l'exécution de select count() from table, InnoDB doit parcourir toute la table pour calculer le nombre de lignes, alors que MyISAM lit simplement le nombre de lignes qui ont été sauvegardées. Notez que lorsque l'instruction count() inclut la condition where, les deux opérations sur la table sont identiques.

3, pour les champs de type AUTO_INCREMENT, InnoDB doit contenir uniquement l'index du champ, mais dans la table MyISAM, vous pouvez construire un index commun avec d'autres champs.

4, DELETE FROM table, InnoDB ne rétablira pas la table, mais la supprimera ligne par ligne.

5. L'opération LOAD TABLE FROM MASTER ne fonctionne pas pour InnoDB ; la solution consiste à transformer d'abord la table InnoDB en une table MyISAM, à importer les données, puis à transformer la table en table InnoDB, mais l'utilisation des fonctionnalités supplémentaires d'InnoDB (telles que les clés étrangères) de la table ne s'applique pas.

6. En outre, le verrouillage des lignes de la table InnoDB n'est pas absolu, si, lors de l'exécution d'une instruction SQL, MySQL ne peut pas déterminer la portée du balayage, la table InnoDB verrouillera également l'ensemble de la table.

7. InnoDB ne prend pas en charge l'indexation plein texte, alors que MyISAM la prend en charge. L'index plein texte de MyISAM n'est pas utile, car il ne prend pas en charge les mots chinois, qui doivent être ajoutés par l'utilisateur dans l'espace vide, puis écrits dans la table de données, et moins de 4 caractères chinois seront ignorés et les mots désactivés seront considérés comme un seul et même mot.





Previous:Assembly lab questions
Next:sql statement in int to varchar type
Le réseau de fermiers de code, seulement publié dans le processus de la pratique, rencontré des difficultés techniques, ne pas induire les autres en erreur.
Vous devez vous connecter avant de pouvoir poster Log in | Register

C ette version des règles intégralesR


AVERTISSEMENT : Tous les logiciels, matériels de programmation ou articles publiés par le réseau code farmer sont limités à des fins d'étude et de recherche ; le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon, toutes les conséquences s'il vous plaît l'utilisateur responsable. Les informations contenues dans ce site proviennent du réseau, les litiges relatifs aux droits d'auteur n'ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, veuillez soutenir le logiciel authentique, acheter l'enregistrement et obtenir un meilleur service authentique. En cas d'infraction, veuillez nous contacter par courrier électronique pour régler le problème.

Courrier To:help@itsvse.com

QQ | ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 21:33

Réponse rapideRetour au débutRetour à la liste