Qu'est-ce que InnoDB
et MyISAM
dans MySQL
?
Qu'est-ce que InnoDB
et MyISAM
dans MySQL
?
Réponses:
InnoDB
et MYISAM
, sont des moteurs de stockage pour MySQL
.
Ces deux éléments diffèrent sur leur implémentation de verrouillage: InnoDB
verrouille la ligne particulière de la table et MyISAM
verrouille la MySQL
table entière .
Vous pouvez spécifier le type en donnant MYISAM
OR InnoDB
lors de la création d'une table dans DB.
Jettes un coup d'oeil à
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.
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.
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
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.
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
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é.
InnoDB est la valeur par défaut NOT myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB est le moteur de stockage MySQL par défaut. Sauf si vous avez configuré un autre moteur de stockage par défaut, émettre un L'instruction CREATE TABLE sans clause ENGINE = crée une table InnoDB "