web-dev-qa-db-fra.com

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

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

109
user130561

InnoDB et MYISAM, sont des moteurs de stockage pour MySQL.

Ces deux types diffèrent par leur implémentation de verrouillage: InnoDB verrouille la ligne particulière de la table et MyISAM verrouille la totalité de la table MySQL.

Vous pouvez spécifier le type en donnant MYISAM OR InnoDB lors de la création d'une table dans la base de données.

94
Siva

Jettes un coup d'oeil à

InnoDB et MyISAM

InnoDB est un moteur de stockage pour MySQL, inclus en standard dans tous les fichiers binaires actuels distribués par MySQL AB. Sa principale amélioration par rapport aux autres moteurs de stockage utilisables avec MySQL est la prise en charge de transaction conforme à 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 comporte de nombreuses extensions utiles. Le principal défaut de MyISAM est l'absence de prise en charge des transactions. Des versions de MySQL 5.5 et supérieures ont basculé vers le moteur InnoDB pour garantir les contraintes d’intégrité référentielle et une concurrence accrue.

37
Adriaan Stander

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 les environnements Web, d'entreposage de données et autres applications. MyISAM est pris en charge dans toutes les configurations MySQL et constitue le moteur de stockage par défaut sauf si vous avez configuré MySQL pour utiliser un moteur différent par défaut.

InnoDB: moteur de stockage sécurisé pour les transactions (compatible ACID) pour MySQL, doté de fonctionnalités de validation, d'annulation et de récupération sur incident permettant de protéger les données des utilisateurs. Le verrouillage au niveau de la ligne InnoDB (sans escalade en verrous de granularité plus grossiers) et les lectures non verrouillées cohérentes à la manière d'Oracle augmentent la concurrence et les performances pour plusieurs utilisateurs. InnoDB stocke les données utilisateur dans des index clusterisés afin de réduire les E/S pour les requêtes courantes basées sur des clés primaires. Pour préserver l’intégrité des données, InnoDB prend également en charge les contraintes d’intégrité référentielle FOREIGN KEY.

17
mluebke

Je voulais ajouter qu'avoir la possibilité de spécifier un moteur de stockage spécifique par table est l'un des principaux atouts de MySQL (outre la facilité d'utilisation et les bonnes performances sans ajustement). Pour toutes les opérations où des transactions sont nécessaires, restez fidèle à InnoDB. Cependant, MyISAM peut vraiment accélérer les choses lorsque certaines transactions ne sont pas nécessaires - et nécessite moins d’espace disque et RAM par rapport à InnoDB.

Cela dit, InnoDB s'améliore constamment:

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

5
Damir Bulic

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 bloc libre au milieu du fichier de données, vous pouvez INSÉRER de nouvelles lignes dans la table en même temps que les autres threads lisent dans 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 existe un bit appelé concurrent-insert Par défaut, la variable est définie sur 1 et concurrente. les insertions sont traitées comme décrit ci-dessus. S'il est défini sur 0, les insertions simultanées sont désactivées. Si la valeur est 2, les insertions simultanées à la fin de la table sont autorisées même pour les tables comportant des lignes supprimées. 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 lignes perforées/supprimées au milieu de la table (au moment de l'insertion simultanée).

Le niveau d'isolation par défaut og mysql InnoDB est "Lecture répétable". Pour MyISAM, il n'y a pas de transaction. InnoDB utilise le verrouillage au niveau de la ligne alors que MyISAM ne peut utiliser que le verrouillage au niveau de la table. C’est pourquoi InnoDB considère que la reprise après incident est meilleure que MyISAM. Il faut acquérir manuellement le verrou au niveau de la table dans MyISAM pour éviter les effets de concurrence.

4
hi.nitish

Lorsque votre serveur MySQL tombe en panne, les données peuvent être récupérées beaucoup plus facilement à partir d'un ensemble de tables MyISAM que 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 l’incident, elle ne sera pas affectée. Dans le cas d’InnoDB, l’ensemble du fichier de transaction de l’ensemble du serveur MySQL doit être réindexé ou quoi qu’il en soit après un crash. Cela peut devenir assez compliqué.

1
Alex Gnatko

InnoDB est la valeur par défaut NOT myISAM https://dev.mysql.com/doc/refman/5.7/fr/innodb-introduction.html "InnoDB est le moteur de stockage MySQL par défaut. Sauf si vous avez configuré une moteur de stockage par défaut différent, l'émission d'une instruction CREATE TABLE sans clause ENGINE = crée une table InnoDB "

1
adwairi

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 d'ACID pour maintenir l'intégrité des données, mais MyISAM ne suit pas les propriétés d'ACID et ne parvient donc pas à 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. Toutefois, 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 un 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 était utilisée ici, une annulation annulerait les modifications et vous épargniez le risque de perdre de l'argent. Littéralement, la table n'est au courant d'aucun blocage, car les modifications ne seront pas validées dans la table à moins que l'étape 5 soit exécutée avec succès.

Toutefois, dans le cas d’une table MyISAM, il est impossible d’annuler les modifications transactionnelles lorsqu’une annulation est appelée ou en cas de blocage entraînant l’échec de la transaction. Cela signifie que si la transaction a échoué à l'étape 3, de 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 hautes performances: optimisation, sauvegardes et réplication" - Livre de Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev, et Vadim Tkachenko

0
Steffi Keran Rani J