Qu'est-ce que InnoDB et MyISAM dans MySQL?


122

Qu'est-ce que InnoDBet MyISAMdans MySQL?


8
Duplicata de MySql: MyISAM vs Inno DB! , ou vous pouvez faire votre choix: stackoverflow.com/search?q=myisam+vs+innodb
OMG Ponies

C'est le moteur de la base de données ... kavoir.com/2009/09/…
Matthieu

pouvons-nous utiliser les deux moteurs de stockage en même temps pour notre base de données?
user130561

1
Vous pouvez les utiliser simultanément sur différentes tables, mais pour une table donnée, vous devrez choisir celle que vous souhaitez utiliser ...
Matthieu

Réponses:


111

InnoDBet MYISAM, sont des moteurs de stockage pour MySQL.

Ces deux éléments diffèrent sur leur implémentation de verrouillage: InnoDBverrouille la ligne particulière de la table et MyISAMverrouille la MySQLtable entière .

Vous pouvez spécifier le type en donnant MYISAMOR InnoDBlors de la création d'une table dans DB.


Réponse claire et simple.
vadiraj jahagirdar

38

Jettes un coup d'oeil à

InnoDB et MyISAM

InnoDB est un moteur de stockage pour MySQL, inclus en standard dans tous les binaires actuels distribués par MySQL AB. Sa principale amélioration par rapport aux autres moteurs de stockage disponibles pour une utilisation avec MySQL est la prise en charge des transactions compatibles ACID

MyISAM est le moteur de stockage par défaut pour les versions du système de gestion de base de données relationnelle MySQL antérieures à 5.5 1 . Il est basé sur l'ancien code ISAM mais possède de nombreuses extensions utiles. Le défaut majeur de MyISAM est l'absence de support des transactions. Les versions de MySQL 5.5 et supérieures sont passées au moteur InnoDB pour garantir des contraintes d'intégrité référentielle et une plus grande concurrence.


1
pouvons-nous utiliser les deux moteurs de stockage en même temps pour notre base de données?
user130561

2
vous pouvez, car pour chaque table, vous pouvez définir un moteur de stockage différent. une autre question est de savoir si vous devriez. dans la documentation mysql sont quelques explications sur ce sujet.
nano7

18

Ce sont des moteurs de stockage.

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

MyISAM: le moteur de stockage MySQL par défaut et celui qui est le plus utilisé dans le Web, l'entreposage de données et d'autres environnements d'application. MyISAM est pris en charge dans toutes les configurations MySQL et est le moteur de stockage par défaut, sauf si vous avez configuré MySQL pour en utiliser un autre par défaut.

InnoDB: un moteur de stockage sécurisé pour les transactions (compatible ACID) pour MySQL qui a des capacités de validation, de restauration et de récupération après incident pour protéger les données des utilisateurs. Le verrouillage InnoDB au niveau des lignes (sans escalade vers des verrous de granularité plus grossiers) et les lectures non verrouillables cohérentes de style Oracle augmentent la concurrence et les performances multi-utilisateurs. InnoDB stocke les données utilisateur dans des index clusterisés pour 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érentielle FOREIGN KEY.


Ainsi, pendant que nous installons MySQL, devons-nous spécifier spécifiquement le moteur de stockage à utiliser comme base de données MySQL?
user130561

3
Comme mentionné dans mon article, la valeur par défaut est MyISAM. Si vous souhaitez utiliser les fonctionnalités d'un autre moteur de stockage tel que INNODB, alors oui, vous devez spécifier. Cela ne se fait pas lors de l'installation, mais lors de la création initiale de la table.
mluebke le

3
Mais selon ceci: - dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; Le moteur par défaut est InnoDB.
Harsha

2
Selon dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : "Le moteur par défaut est InnoDB à partir de MySQL 5.5.5 (MyISAM avant 5.5.5)" Donc, le moteur par défaut est maintenant InnoDB. Cette réponse a été publiée 16 jours après la première version à disponibilité générale avec InnoDB comme moteur par défaut;)
SOFe

6

Je voulais ajouter que la possibilité de spécifier un moteur de stockage spécifique par table est l'une des principales forces de MySQL (en plus de la facilité d'utilisation et de bonnes performances sans ajustement). Pour toutes les opérations où des transactions sont nécessaires, il suffit de s'en tenir à InnoDB. Cependant, MyISAM peut vraiment accélérer les choses lorsque les transactions ne sont pas nécessaires dans certaines situations - et nécessite moins d'espace disque et de RAM par rapport à InnoDB.

Cela dit, InnoDB s'améliore tout le temps:

Améliorations des performances et de l'évolutivité d'InnoDB 1.1


4

MyISAM ne suit pas ACID contrairement à InnoDB qui suit les transactions pour maintenir l'intégrité des données.

MyISAM prend en charge les insertions simultanées: si une table n'a pas de blocs libres au milieu du fichier de données, vous pouvez y INSÉRER de nouvelles lignes en même temps que d'autres threads lisent à partir de la table. MySqlDoc

C'est pourquoi MyISAM est plus rapide et prend moins de place. Par exemple, le moteur de stockage MySQL MyISAM ne prend pas en charge les transactions. contraintes de MySQL MYISAM Il y a un peu appelé insertion simultanée Par défaut, la variable est mise à 1 et les insertions simultanées sont gérées comme il vient d'être décrit. S'il est défini sur 0, les insertions simultanées sont désactivées. S'il est défini sur 2, les insertions simultanées à la fin de la table sont autorisées même pour les tables qui ont supprimé des lignes. Une instruction INSERT peut être exécutée pour ajouter des lignes à la fin de la table avec select en même temps s'il n'y a pas de trous / lignes supprimées au milieu de la table (au moment de l'insertion simultanée).

Le niveau d'isolement par défaut de mysql InnoDB est "Read Repeatable". Pour MyISAM, il n'y a pas de transaction. InnoDB utilise le verrouillage au niveau des lignes tandis que MyISAM ne peut utiliser que le verrouillage au niveau de la table, c'est pourquoi InnoDB a une récupération de crash est meilleure que MyISAM. Il faut acquérir manuellement le verrou au niveau de la table dans MyISAM si l'on veut éviter les effets de concurrence.


3

InnoDB est un moteur de stockage transactionnel de MySQL alors que MyISAM est un moteur de stockage non transactionnel. En d'autres termes, InnoDB suit les propriétés ACID pour maintenir l'intégrité des données mais MyISAM ne suit pas les propriétés ACID, échouant ainsi à maintenir l'intégrité des données.

Dans une table InnoDB (transactionnelle), les modifications transactionnelles peuvent être facilement annulées si une restauration est requise. Mais les modifications apportées à une table MyISAM (non transactionnelle) ne peuvent pas être annulées lorsque l'annulation d'une transaction est requise.

Par exemple, vous souhaitez transférer de l'argent de votre compte courant vers votre compte d'épargne. Cela se fait par une transaction qui comprend 5 requêtes.

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

Supposons que le processus se bloque à l'étape 4. Si une table InnoDB a été utilisée ici, une restauration annule les modifications et vous évite le risque de perdre de l'argent. Littéralement, la table n'a connaissance d'aucun plantage car les modifications ne seront pas validées dans la table à moins que l'étape 5 ne soit exécutée avec succès.

Mais dans le cas d'une table MyISAM, on ne peut pas annuler les modifications transactionnelles lorsqu'un rollback est appelé ou s'il y a un plantage conduisant à l'échec de la transaction. Cela signifie que si la transaction a échoué à l'étape 3, l'argent sera déduit de votre compte courant. Mais l'argent n'aurait pas été ajouté à votre compte d'épargne.

Exemple de courtoisie: "MySQL haute performance: optimisation, sauvegardes et réplication" - Livre par Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev et Vadim Tkachenko


1

Lorsque votre serveur MySQL plante, les données peuvent être récupérées beaucoup plus facilement à partir d'un ensemble de tables MyISAM qu'à partir de ce gros fichier de transaction InnoDB. Chaque table MyISAM a un fichier séparé, et si aucune opération d'écriture n'a été effectuée sur cette table pendant le crash, il ne sera totalement pas affecté. Dans le cas d'InnoDB, tout le fichier de transaction de l'ensemble du serveur MySQL doit être réindexé ou quoi que ce soit après un crash. Cela peut devenir assez compliqué.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.