Présentation du moteur de base de données MySQL

1. Qu'est-ce qu'un moteur de base de données

    Un moteur de base de données est un programme ou un segment de programme qui exploite une base de données et est utilisé pour stocker, traiter et protéger les données en tant que service principal.

    Utilisez le moteur de base de données pour contrôler l'accès et traiter les transactions rapidement afin de répondre aux exigences de la plupart des applications qui traitent de grandes quantités de données dans l'entreprise. Le projet d'application de base de données est lié à la base de données via le moteur de base de données.

    Qu'est-ce qu'un moteur de base de données ? En bref, un moteur de base de données est un programme qui pilote diverses bases de données et qui est responsable du traitement de toute la partie essentielle du travail lié à la base de données. De même, les instructions d'utilisation du projet d'application de base de données seront appliquées à la base de données via le traitement du moteur de base de données.

    MySQL est un logiciel de base de données couramment utilisé. Il présente de nombreux avantages, tels que l'open source, la gratuité, etc. En fait, il a également une bonne fonctionnalité, c'est-à-dire qu'il existe une variété de moteurs parmi lesquels vous pouvez choisir. Le moteur de base de données MySQL dépend de la manière dont MySQL a été compilé lors de l'installation. Pour ajouter un nouveau moteur, MYSQL doit être recompilé. MYSQL couramment utilisé deux moteurs sont MyISAM et InnoDB .

2、MyISAM

    Avant MySQL 5.5.8, MyIASM était le moteur de stockage par défaut, mais il ne prenait pas en charge les transactions de base de données, ni les verrous de ligne et les clés étrangères. Par conséquent, lors de l'insertion ou de la mise à jour des données, l'opération d'écriture doit verrouiller toute la table. , ce qui est inefficace. Il sera inférieur, MyISAM est principalement destiné à certaines applications OLAP (On-Line Analytical Processing).

    Cependant, contrairement à Innodb, MyIASM stocke le nombre de lignes dans la table, donc lorsque SELECT COUNT(*) FROM TABLE, vous n'avez qu'à lire directement la valeur enregistrée sans parcourir toute la table. Si la table comporte beaucoup plus d'opérations de lecture que d'opérations d'écriture et ne nécessite pas de prise en charge des transactions de base de données, alors MyIASM est également un bon choix.

    De plus, une autre caractéristique distinctive de MyISAM est que sa mise en mémoire tampon ne met en mémoire tampon que les fichiers d'index, pas les fichiers de données, ce qui est très différent de la plupart des bases de données.

    Le moteur MyISAM utilise B+Tree comme structure d'index, et le champ de données du nœud feuille stocke l'adresse de l'enregistrement de données. La méthode d'indexation de MyISAM est également appelée "non-clustered", qui est appelée pour la distinguer de l'index clusterisé d'InnoDB. La figure suivante est un diagramme schématique de l'index de clé primaire MyISAM :

3、InnoDB

    À partir de MySQL 5.5.8, le moteur de stockage par défaut est InnoDB. Le moteur Innodb prend en charge les transactions ACID de base de données et implémente quatre niveaux d'isolation de la norme SQL.Son objectif de conception est principalement pour les applications OLTP (On-Line Transaction Processing).

    Le moteur fournit également des verrous de ligne et des contraintes de clé étrangère, et prend en charge des lectures non verrouillables cohérentes. Son objectif de conception est de gérer des systèmes de base de données de grande capacité. Il s'agit en fait d'un système de base de données complet basé sur l'arrière-plan MySQL. Lorsque MySQL est en cours d'exécution, Innodb créera un pool de mémoire tampon pour mettre en mémoire tampon les données et les index. Cependant, le moteur ne prend pas en charge les index de type FULLTEXT et n'enregistre pas le nombre de lignes dans la table. Lorsque SELECT COUNT(*) FROM TABLE, la table entière doit être analysée.

    Ce moteur est préféré lorsque des transactions de base de données doivent être utilisées. En raison de la plus petite granularité du verrou, l'opération d'écriture ne verrouille pas toute la table, donc lorsque la simultanéité est élevée, l'utilisation du moteur Innodb améliorera l'efficacité.

    Mais l'utilisation de verrous au niveau des lignes n'est pas absolue.Si MySQL ne peut pas déterminer la plage à analyser lors de l'exécution d'une instruction SQL, la table InnoDB verrouillera également la table entière.

    La structure d'index du moteur Innodb est également B+Tree, mais le fichier d'index d'Innodb lui-même est un fichier de données, c'est-à-dire que le champ de données du B+Tree stocke les données réelles, et cet index est un index clusterisé. La clé de cet index est la clé primaire de la table de données, donc le fichier de données de la table InnoDB lui-même est l'index primaire.

    Étant donné que les fichiers de données d'InnoDB sont agrégés en fonction de la clé primaire, InnoDB exige que la table ait une clé primaire (MyISAM ne l'a pas). S'il n'y a pas de spécification explicite, le système MySQL sélectionnera automatiquement une colonne qui peut identifier de manière unique l'enregistrement de données comme clé primaire. S'il n'existe pas pour une telle colonne, MySQL génère automatiquement un champ implicite comme clé primaire pour la table InnoDB. La longueur de ce champ est de 6 octets et le type est un entier long.

    Et contrairement à MyISAM, le champ de données de l'index auxiliaire d'InnoDB stocke également la valeur de la clé primaire de l'enregistrement correspondant au lieu de l'adresse, donc lors de la recherche avec l'index auxiliaire, il trouvera d'abord la clé primaire basée sur l'index auxiliaire, puis trouvera le réel données basées sur l'index de clé primaire.

    Par conséquent, Innodb ne recommande pas d'utiliser une clé primaire trop longue, sinon l'index auxiliaire deviendra trop grand. Il est recommandé d'utiliser un champ d'auto-incrémentation comme clé primaire, de sorte que chaque nœud de l'arbre B+ soit rempli séquentiellement sans ajustements fractionnés fréquents, ce qui peut effectivement améliorer l'efficacité de l'insertion des données. L'index de clé primaire et l'index auxiliaire d'Innodb sont illustrés dans la figure suivante :

 

 

    Les tables InnoDB sont basées sur des index clusterisés. Par conséquent, l'index d'InnoDB peut fournir une performance de recherche de clé primaire très rapide. Cependant, son index secondaire (index secondaire, c'est-à-dire un index de clé non primaire) contiendra également des colonnes de clé primaire, donc si la définition de clé primaire est relativement grande, les autres index seront également grands. Si vous souhaitez définir de nombreux index sur la table, essayez de définir la clé primaire aussi petite que possible. InnoDB ne compresse pas les index. 

4. La différence entre MyISAM et InnoDB

    InnoDB et MyISAM sont les deux types de table les plus couramment utilisés lors de l'utilisation de MySQL.Ces deux types de table ont leurs propres avantages et inconvénients, selon l'application spécifique.

    La différence fondamentale est la suivante : le type MyISAM ne prend pas en charge le traitement avancé tel que le traitement des transactions, tandis que le type InnoDB le prend en charge. La table de type MyISAM met l'accent sur les performances et son exécution est plus rapide que le type InnoDB, mais elle ne fournit pas de prise en charge des transactions, tandis qu'InnoDB fournit une prise en charge des transactions et des fonctions de base de données avancées telles que les clés externes.

Voici quelques détails et différences d'implémentation :

(1) InnoDB ne prend pas en charge les index de type FULLTEXT ;
(2) InnoDB n'enregistre pas le nombre spécifique de lignes dans la table, c'est-à-dire que lors de l'exécution de select count(*) fromtable, InnoDB doit parcourir toute la table pour calculer combien de lignes il y a, mais MyISAM lit simplement le nombre de lignes enregistrées. Notez que lorsque l'instruction count(*) contient des conditions where, les opérations des deux tables sont les mêmes ;
(3) Pour les champs de type AUTO_INCREMENT, InnoDB ne doit contenir que l'index du champ, mais dans les tables MyISAM, vous pouvez créer un index commun avec d'autres champs.
(4) Lorsque DELETE FROM table, InnoDB ne recréera pas la table, mais la supprimera ligne par ligne ; (
5) L'opération LOAD TABLE FROMMASTER ne fonctionne pas pour InnoDB, la solution consiste d'abord à changer la table InnoDB en table MyISAM, importer Les données sont ensuite remplacées par une table InnoDB, mais cela ne s'applique pas aux tables qui utilisent des fonctionnalités InnoDB supplémentaires (telles que les clés étrangères).
(5) La différence entre l'index principal, le fichier de données d'InnoDB lui-même est le fichier d'index, et l'index et les données de MyISAM sont séparés.
(6) La différence entre l'index auxiliaire : le champ de données de l'index auxiliaire d'InnoDB stocke la valeur de la clé primaire de l'enregistrement correspondant au lieu de l'adresse. L'index secondaire MyISAM n'est pas très différent de l'index primaire.

    

  • MyISAM est adapté pour :

(1) Effectuez de nombreux calculs de comptage ;
(2) Insérez rarement, interrogez très fréquemment ;
(3) Aucune transaction.

  • InnoDB est adapté pour :

(1) Des transactions sont nécessaires ;
(2) Les mises à jour de table et les requêtes sont fréquentes
(3) Les ensembles de données de grande taille ont tendance à choisir le moteur InnoDB car il prend en charge le traitement des transactions et la récupération après échec. La taille de la base de données détermine la durée de la récupération après panne. InnoDB peut utiliser les journaux de transactions pour la récupération des données, ce qui est relativement rapide.

Je suppose que tu aimes

Origine blog.csdn.net/wangshiqi666/article/details/130423446
conseillé
Classement