Moteur de stockage MYSQL - la différence entre MYISAM et INNODB

Transactions dans mysql

1. Transaction dans une base de données informatique: dans la terminologie informatique, elle fait référence à une unité d'exécution de programme (unité) qui accède et peut mettre à jour divers éléments de données
dans la base de données. 2. Dans une base de données relationnelle, une transaction peut être une instruction SQL, un groupe de l'instruction SQL ou du programme entier

  • Une transaction, tant qu'il y a une erreur au milieu, toutes les opérations de cette transaction doivent être annulées
  • Myisam ne prend pas en charge les transactions, tandis qu'innodb prend en charge les transactions
Moteur de stockage dans mysql
Les moteurs de stockage mysql incluent: MyISAM, InnoDB, BDB, MEMORY, MERGE, EXAMPLE, NDBCluster, ARCHIVE, CSV, BLACKHOLE, FEDERATED, etc., parmi lesquels InnoDB et BDB fournissent des tables sécurisées pour les transactions, et d'autres moteurs de stockage sont non transactionnels. tables sûres.

version mysql

  • Le moteur de stockage par défaut avant la version 5.1 était myisam,
  • Le moteur de stockage par défaut après 5.1 est innodb.

1. La différence entre myisam et innodb

MyISAM:
myisam prend uniquement en charge les verrous au niveau de la table. Lorsque l'utilisateur utilise la table myisam, les instructions select, update, delete et insert verrouillent automatiquement la table. Si la table verrouillée répond à la simultanéité d'insertion, insérer à la fin de la table. Nouvelles données. Vous pouvez également verrouiller la table via la commande lock table. Cette opération peut principalement imiter les transactions, mais elle consomme beaucoup d'argent et n'est généralement utilisée que dans les démonstrations expérimentales.
InnoDB:
Innodb prend en charge les transactions et les verrous au niveau des lignes, ce qui est la principale fonctionnalité d'InnoDB.
Propriétés ACID de la transaction: atomicité, cohérente, isolante, durable.
Plusieurs problèmes causés par des transactions simultanées: mise à jour perdue, lecture sale, lecture non répétable, lecture fantôme
Insérez la description de l'image ici
Vérifiez le niveau d'isolation de transaction par défaut de mysql "afficher les variables globales comme 'x_isolation';"

mysql> show global variables like 'tx_isolation'; 
+--------------------+----------------------------+
| Variable_name | Value                        |
+--------------------+----------------------------+
| tx_isolation      | REPEATABLE-READ   |
+--------------------+----------------------------+
1 row in set (0.01 sec)
等同于 select @@global.tx_isolation
  • Définissez le niveau d'isolement de session actuel.

  • Définit le niveau d'isolement actuel de la lecture répétable du niveau d'isolement global des transactions du système;
    Le mode de verrouillage de ligne d'Innodb a les types suivants: verrous partagés, verrous exclusifs, verrous partagés intentionnels (verrous de table), verrous exclusifs intentionnels (verrous de table), verrous d'espacement.

Remarque: lorsque l'instruction n'utilise pas l'index, innodb ne peut pas déterminer la ligne d'opération, cette fois le verrou d'intention est utilisé, c'est-à-dire le verrou de table
2. Différences entre les fichiers de base de données

Insérez la description de l'image iciInsérez la description de l'image ici

3. Différences d'index

1. À propos de la croissance automatique

  • La colonne de croissance automatique du moteur myisam doit être un index. S'il s'agit d'un index composite, la croissance automatique peut ne pas être la première colonne. Elle peut être triée et incrémentée en fonction des colonnes précédentes.

  • La croissance automatique du moteur innodb doit être un index. S'il s'agit d'un index composite, il doit également être la première colonne de l'index composite.
    2. À propos de la clé primaire

  • Myisam permet à des tables sans index ni clé primaire d'exister,

  • L'index de myisam est l'adresse de la ligne enregistrée.

  • Si le moteur innodb ne définit pas de clé primaire ou d'index unique non vide, il générera automatiquement une clé primaire de 6 octets (non visible par l'utilisateur)

  • Les données d'innodb font partie de l'index principal et l'index supplémentaire enregistre la valeur de l'index principal
    3. À propos de la fonction count ()

  • myisam enregistre le nombre total de lignes de la table, si sélectionnez count (*) de la table; retirera directement la valeur

  • Innodb n'enregistre pas le nombre total de lignes dans la table. Si vous utilisez select count (*) from table; il traversera toute la table, ce qui consomme beaucoup d'argent, mais après avoir ajouté la condition wehre, myisam et innodb gèrent le de la même façon.
    4. Index de texte intégral

  • myisam prend en charge l'index de texte intégral de type FULLTEXT

  • Innodb ne prend pas en charge l'indexation de texte intégral de type FULLTEXT, mais innodb peut utiliser le plug-in sphinx pour prendre en charge l'indexation de texte intégral, et l'effet est meilleur. (Sphinx est un logiciel open source qui fournit des interfaces API en plusieurs langues, ce qui peut optimiser diverses requêtes de mysql)
    5. Lorsque la suppression de la table
    utilise cette commande, InnoDB ne recrée pas les tables, mais supprime les données une par une. Si vous souhaitez effacez une table avec une grande quantité de données sur innodb, il est préférable de ne pas utiliser cette commande. (Il est recommandé d'utiliser la table tronquée, mais l'utilisateur doit avoir l'autorisation de supprimer cette table)
    6. Emplacement d'enregistrement de l'index

  • Les index de myisam sont enregistrés en tant que nom de table + fichiers .MYI.

  • L'index et les données d'Innodb sont stockés ensemble dans l'espace table.

Pour résumer

1. MyISAM ne prend pas en charge les transactions. InnoDB est un moteur de stockage de type transaction. Lorsque nos tables nécessitent une prise en charge des transactions, MyISAM ne doit pas être choisi.

2. MyISAM ne supporte que les verrous de table, BDB prend en charge les verrous de page et des verrous de niveau de table par défaut comme les verrous de page, tandis que InnoDB supporte les verrous de niveau ligne et des verrous de niveau de table par défaut comme des verrous de niveau ligne
(tableau -level locks: verrouille directement toute la table, pendant la période de verrouillage, les autres processus ne peuvent pas écrire dans la table. Si le verrou d'écriture est défini, les autres processus ne sont pas autorisés à lire. MyISAM est un moteur de stockage de verrouillage n'aura pas de problèmes de blocage)

3. Le moteur MyISAM ne prend pas en charge les clés étrangères, InnoDB prend en charge les clés étrangères

4. La table du moteur MyISAM sera souvent endommagée par un grand nombre de lectures et d'écritures simultanées élevées.

5. MyISAM présente plus d'avantages pour les requêtes count ()

6. InnoDB est conçu pour des performances maximales lors du traitement d'énormes quantités de données.

7. MyISAM prend en charge l'indexation de texte intégral (FULLTEXT), mais InnoDB ne la prend pas en charge

8. L'efficacité de la requête, de la mise à jour et de l'insertion de la table du moteur MyISAM est supérieure à celle d'InnoDB

test

Méthode de test 1: Soumettez 10 requêtes en continu, le nombre total d'enregistrements de table: 380000, unité de temps s

Insérez la description de l'image ici
a. Si votre volume de données est de plusieurs millions et qu'il n'y a pas de traitement de transaction, alors utiliser MyISAM est le meilleur choix
. b. La taille de la table InnoDB est plus grande, et l'utilisation de MyISAM peut économiser beaucoup d'espace sur le disque dur.

Test 2: test de performance de lecture de données. Lire au hasard 1000 enregistrements à chaque fois, lire à plusieurs reprises

Insérez la description de l'image ici
On peut voir que les performances de lecture de MyISAM sont très effrayantes et que l'écart de performance est de 3 fois.

Test 3: deux threads écrivent simultanément et deux threads lisent simultanément.

Insérez la description de l'image ici
Pour résumer: les performances d'insertion d'Innodb sont plus stables dans les applications avec plus d'écritures et moins de lectures, et elles peuvent être fondamentalement inchangées dans des conditions simultanées. S'il s'agit d'une application qui nécessite une vitesse de lecture plus rapide, choisissez MyISAM.

Test 4: Test de performance d'insertion de données. Ici, j'ai testé le paramètre innodb_flush_log_at_trx_commit activé et désactivé. Chaque test est exécuté pendant 40 secondes. Les nombres dans le tableau sont le nombre réel d'insertions.

Insérez la description de l'image ici
De manière générale, les performances de MyISAM sont meilleures. Pendant le test d'insertion, j'ai surveillé les ressources système et j'ai constaté que MyISAM occupe très peu de ressources système, mais Innodb occupe un disque élevé, ce qui devrait être beaucoup plus nécessaire pour le contrôle des transactions. Journal enregistré

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45942735/article/details/104568969
conseillé
Classement