web-dev-qa-db-fra.com

Quelle est la différence entre MyISAM et InnoDB?

Je comprends que cette question a déjà été posée, mais la plupart du temps, elle est posée en relation avec une base de données ou une table spécifique. Je ne trouve pas de réponse sur ce site qui décrit les deux moteurs et leurs différences sans égard à la base de données spécifique de quelqu'un.

Je souhaite pouvoir prendre des décisions plus éclairées à l’avenir en ce qui concerne la conception d’une table ou d’une base de données. Je cherche donc une réponse complète sur les différences entre les deux moteurs de stockage.

Quelle est la différence entre MyISAM et InnoDB , et que devrais-je rechercher lorsque je tente de choisir entre l'un ou l'autre?

248
Scott

Les principales différences entre InnoDB et MyISAM ("en ce qui concerne la conception d'une table ou d'une base de données" sur laquelle vous avez posé la question) sont la prise en charge de "l'intégrité référentielle" et des "transactions".

Si vous avez besoin de la base de données pour appliquer des contraintes de clé étrangère ou de la base de données pour prendre en charge des transactions (modifications apportées par deux opérations DML ou plus traitées comme une seule unité de travail, toutes les modifications étant appliquées ou annulées). vous choisiriez alors le moteur InnoDB, car ces fonctions sont absentes du moteur MyISAM.

Ce sont les deux plus grandes différences. Une autre grande différence est la concurrence. Avec MyISAM, une instruction DML obtiendra un verrou exclusif sur la table et tant que ce verrou sera maintenu, aucune autre session ne pourra effectuer d'opération SELECT ou DML sur la table.

Les deux moteurs spécifiques sur lesquels vous avez posé des questions (InnoDB et MyISAM) ont des objectifs de conception différents. MySQL dispose également d'autres moteurs de stockage, avec leurs propres objectifs de conception.

Ainsi, pour choisir entre InnoDB et MyISAM, la première étape consiste à déterminer si vous avez besoin des fonctionnalités fournies par InnoDB. Si ce n'est pas le cas, MyISAM doit être pris en compte.

Une discussion plus détaillée des différences est plutôt peu pratique (dans ce forum) en l'absence d'une discussion plus détaillée de l'espace du problème ... comment l'application utilisera la base de données, combien de tables, taille des tables, charge de transaction, volumes de select , insertion, mises à jour, conditions d’accès simultané, fonctionnalités de réplication, etc.


La conception logique de la base de données devrait être centrée sur l'analyse des données et les besoins des utilisateurs; le choix d'utiliser une base de données relationnelle viendrait plus tard, et même plus tard, le choix de MySQL en tant que système de gestion de base de données relationnelle, puis la sélection d'un moteur de stockage pour chaque table.

409
spencer7593

MYISAM:

  1. MYISAM prend en charge le verrouillage au niveau de la table
  2. MyISAM conçu pour le besoin de rapidité
  3. MyISAM ne supporte pas les clés étrangères, nous appelons donc MySQL avec MYISAM est un SGBD
  4. MyISAM stocke ses tables, données et index dans un espace disque en utilisant trois fichiers distincts. (nomtable.FRM, nomtable.MYD, nomtable.MYI)
  5. MYISAM ne prend pas en charge la transaction. Vous ne pouvez pas valider et annuler avec MYISAM. Une fois que vous lancez une commande, c’est fait.
  6. MYISAM prend en charge la recherche en texte intégral
  7. Vous pouvez utiliser MyISAM, si la table est plus statique avec beaucoup de sélections et moins de mises à jour et de suppressions.

INNODB:

  1. InnoDB prend en charge le verrouillage au niveau de la ligne
  2. InnoDB conçu pour des performances maximales lors du traitement de gros volumes de données
  3. InnoDB supporte les clés étrangères et nous appelons donc MySQL avec InnoDB est RDBMS
  4. InnoDB stocke ses tables et index dans un tablespace
  5. InnoDB prend en charge la transaction. Vous pouvez commettre et annuler avec InnoDB
337
medina