C'est encore une nouvelle semaine, bon lundi à tous.
En raison d'un changement d'emploi et de la recherche d'une maison, une série de choses ont été rapprochées, j'ai donc arrêté de mettre à jour pendant plus d'un mois récemment. Maintenant que tout est réglé, je peux coder en toute tranquillité.
D’accord, sans plus tarder, commençons un nouveau voyage. J'ai récemment lu le livre "MySQL Technology Insider - InnoDB Storage Engine", donc je veux juste l'enregistrer.
Jetons d'abord un coup d'œil au schéma d'architecture de MySQL pour en avoir une compréhension globale. MySQL est principalement divisé en quatre couches d'architecture, à savoir la couche de connexion réseau, la couche de service, la couche moteur de stockage et la couche physique. Les instructions SQL que nous écrivons habituellement et l'optimisation des instructions SQL se trouvent toutes dans la couche de service. Elle suit en fait certains principes afin que les instructions SQL puissent être exécutées en fonction de nos résultats attendus.
est principalement responsable de la gestion des connexions, de l'authentification des autorisations, de la sécurité, etc. Chaque connexion client correspond à un thread sur le serveur. Maintenez un pool de threads sur le serveur pour éviter de créer et de détruire des threads pour chaque connexion. Lorsqu'un client se connecte à un serveur MySQL, le serveur l'authentifie. Il peut être authentifié via un nom d'utilisateur et un mot de passe, ou via un certificat SSL. Après l'authentification de connexion, le serveur vérifiera également si le client a l'autorisation d'exécuter une certaine requête. Cette couche n'est pas une technologie propre à MySQL.
Cette couche est le cœur de MySQL, comprenant le cache de requêtes, l'analyseur, l'arbre d'analyse, le préprocesseur et l'optimiseur de requêtes.
Cache de requête
Avant la requête formelle, le serveur vérifiera le cache de requête et s'il peut trouver les requêtes correspondantes, il n'est pas nécessaire d'effectuer l'analyse des requêtes, l'optimisation, l'exécution et d'autres processus, et l'ensemble de résultats dans le cache est directement renvoyé.
Analyseur et préprocesseur
L'analyseur MySQL construira un arbre d'analyse basé sur l'instruction de requête Il est principalement utilisé Il est utilisé. pour vérifier si l'instruction est correcte en fonction de règles grammaticales, par exemple si les mots-clés SQL sont corrects et si l'ordre des mots-clés est correct.
Le préprocesseur sert principalement à une vérification plus approfondie, par exemple si le nom de la table et le nom du champ sont corrects, etc.
Optimiseur de requête
L'optimiseur de requête convertit l'arbre d'analyse en un plan de requête. En général, une requête peut être exécutée de plusieurs manières. et finalement renvoie le même résultat, l'optimiseur trouve le plan d'exécution optimal
plan d'exécution
après avoir terminé l'analyse Après l'optimisation Phase, MySQL appelle l'interface correspondante fournie par la couche moteur de stockage selon le plan d'exécution correspondant pour obtenir les résultats.
est responsable du stockage et de la récupération des données MySQL. Elle fournit une série d'interfaces pour masquer les différences entre les différents moteurs.
注意:存储引擎是针对表的,而不是针对库。也就是说同一个库里面的不同表可以拥有不同的存储引擎。
Il existe deux moteurs de stockage courants, MyISAM et InnoDB. Examinons leurs différences.
Tout d'abord, nous créons une table test1 avec le moteur de stockage MyISAM.
create table test1( a INTEGER, b varchar(10) )ENGINE=MyISAM;
Nous pouvons aller dans le répertoire pertinent de MySQL pour voir son contenu réellement stocké et constater qu'il correspond à trois fichiers.
Deuxièmement, nous créons une table test2 avec le moteur de stockage InnoDB.
create table test2( a INTEGER, b varchar(10) )ENGINE=INNODB;
Jetons un coup d'œil à son contenu réellement stocké et constatons qu'il correspond à ce fichier.
Ensuite la question se pose, où sont stockés ses fichiers de données et ses fichiers d'index. Je vais vous laisser avec une question ici pour l'instant, et nous en parlerons dans le prochain chapitre, « Documents ».
stocke les données sur le disque dur.
Nous envoyons une instruction SQL, à quoi ressemble le processus global dans MySQL ?
L'utilisateur établit d'abord une connexion avec le serveur via un client tel que Navicat. Un nom d'utilisateur et un mot de passe sont requis pour l'authentification, ou un certificat SSL peut être utilisé pour l'authentification.
Une fois la connexion réussie, MySQL déterminera si le rôle dispose d'autorisations sur certaines tables en fonction des autorisations correspondantes.
Si vous disposez des autorisations appropriées, lorsque l'utilisateur envoie une instruction de sélection de requête, MySQL interroge d'abord le cache. S'il existe déjà un cache pour cette instruction, il renverra directement If. non, exécutez le processus suivant. S'il s'agit d'une mise à jour, d'une nouvelle insertion ou d'une suppression, le cache ne sera pas interrogé et le processus suivant sera exécuté directement.
MySQL analysera l'instruction SQL dans une arborescence, puis la vérifiera, par exemple si les mots-clés sont corrects, si l'ordre des mots-clés est correct, si le nom de la table est correct, si les champs sont corrects , etc. Si l'authentification échoue, une erreur sera renvoyée directement. Si l'authentification réussit, passez directement au processus suivant.
MySQL effectue une optimisation des requêtes sur l'arbre d'analyse, car plusieurs SQL peuvent exprimer la même signification, mais le temps consommé peut varier considérablement. Par conséquent, MySQL trouve l'exécution optimale des instructions pour le moteur de stockage de la table, c'est-à-dire génère le plan d'exécution correspondant.
Utilisez le plan d'exécution généré ci-dessus pour appeler l'interface de la couche moteur de stockage. C'est l'explication que nous utilisons habituellement, qui peut être utilisée pour vérifier si l'index est indexé, le temps consommé et d'autres informations.
Différents moteurs de stockage se rendront à l'emplacement de stockage physique correspondant, trouveront les données correspondantes, les conditionneront et renverront le résultat.
Si vous obtenez le jeu de résultats et qu'il s'agit d'une instruction select, MySQL mettra les résultats dans le cache pour éviter la consommation de ressources causée par l'exécution de la même opération la prochaine fois, et les renverra à Résultat client. À ce stade, le processus d'exécution d'une instruction SQL est terminé.
Pour plus d'articles techniques liés à MySQL, veuillez visiter la colonne Tutoriel MySQL pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!