Maison  >  Article  >  base de données  >  Une analyse approfondie du processus d'exécution des instructions de requête MySQL

Une analyse approfondie du processus d'exécution des instructions de requête MySQL

WBOY
WBOYavant
2022-05-05 19:04:401819parcourir

Cet article vous apporte des connaissances pertinentes sur mysql, qui présente principalement le processus d'exécution des instructions de requête. En prenant MYSQL comme exemple, il révèle le processus de requête de la base de données MySQL et permet à chacun de comprendre certaines parties de la base de données. compréhension, j'espère que cela sera utile à tout le monde.

Une analyse approfondie du processus d'exécution des instructions de requête MySQL

Apprentissage recommandé : Tutoriel vidéo mysql

Nous devons récupérer certaines données qui répondent aux exigences de la base de données. Nous pouvons facilement écrire du SQL comme Select A B C FROM T WHERE ID = XX, puis lorsque nous l'envoyons à. la base de données Que fait exactement la base de données lors d'une requête ?

Aujourd'hui, nous prenons MYSQL comme exemple pour révéler le processus de requête de la base de données MySQL et permettre à chacun de comprendre certaines parties de la base de données.

1. Architecture MYSQL

MySQL peut être principalement divisé en couche serveur et couche moteur de stockage.

La couche serveur comprend des connecteurs, des caches de requêtes, des analyseurs, des optimiseurs, des exécuteurs, etc. Toutes les fonctions du moteur de stockage croisé sont implémentées dans cette couche, telles que les procédures stockées, les déclencheurs, les vues, les fonctions, etc., et un journal général module module de journal binlog ;

couche de moteur de stockage est responsable du stockage et de la récupération des données. Son modèle architectural est plug-in et prend en charge plusieurs moteurs de stockage tels que InnoDB, MyISAM et Memory. Le moteur de stockage le plus couramment utilisé est désormais InnoDB (qui prend en charge les transactions), qui est devenu le moteur de stockage par défaut depuis la version 5.5.5 de MySQL.

2. Connecteur

Le connecteur est principalement responsable de la connexion de l'utilisateur à la base de données et de l'authentification de l'identité de l'utilisateur, y compris la vérification des mots de passe des comptes, des autorisations et d'autres opérations.

Si le mot de passe de l'utilisateur est incorrect, vous recevrez une erreur « Accès refusé pour l'utilisateur », puis le programme client mettra fin à son exécution.

Si le mot de passe du compte utilisateur a été transmis, le connecteur interrogera toutes les autorisations de l'utilisateur dans la table des autorisations. Les jugements logiques d'autorisation ultérieurs dans cette connexion s'appuieront sur les données d'autorisation lues à ce moment-là, c'est-à-dire ultérieures. Tant que la connexion n'est pas déconnectée, même si l'administrateur modifie les autorisations de l'utilisateur, l'utilisateur ne sera pas affecté.

3. Cache de requête

Une fois que le client a établi une connexion avec le serveur, MySQL interrogera d'abord le cache lors de l'exécution de l'instruction de requête pour vérifier si ce SQL a déjà été exécuté. Les instructions précédemment exécutées et leurs résultats seront mis en cache directement en mémoire sous forme de paires clé-valeur. La clé est l'instruction de requête et la valeur est le résultat de la requête. Si votre requête parvient à trouver la clé directement dans ce cache, alors la valeur sera renvoyée directement au client. S'il n'y a aucun résultat, les opérations suivantes doivent être effectuées et les résultats seront mis en cache une fois terminés pour faciliter le prochain appel.

Quand vous verrez cela, vos yeux s'illumineront et vous aurez envie de faire bon usage de cette fonction.

En fait, il n'est pas recommandé d'utiliser le cache de requêtes ici. Le cache de requêtes échoue très fréquemment Tant qu'il y a une mise à jour d'une table, tous les caches de requêtes sur cette table seront effacés. Il est donc possible que vous ayez pris la peine de sauvegarder les résultats, pour ensuite les effacer par une mise à jour avant même de les utiliser. Pour les bases de données soumises à une forte pression de mise à jour, le taux de réussite du cache de requêtes sera très faible. A moins que ce ne soit le genre de tableau qui ne sera pas mis à jour avant longtemps, comme le tableau de configuration système, mais ne devrait-on pas mettre ce genre de configuration système sur la plateforme de configuration ?

La fonction de cache de requêtes a été supprimée dans MYSQL8.0. Les responsables estiment également que cette fonction a relativement peu de scénarios d'application pratiques, ils l'ont donc simplement supprimée.

4. Analyseur

Si Mysql n'atteint pas le cache de requêtes, il entrera dans l'analyseur. L'analyseur est principalement utilisé pour analyser à quoi sert l'instruction SQL. L'analyseur est principalement divisé en deux étapes suivantes :

  • Analyse lexicale : Une instruction SQL se compose de plusieurs chaînes. Tout d'abord, les mots-clés doivent être extraits, tels que select, la table de requête, les noms de champs, les conditions de requête, etc. . doit être extrait attendre.

  • Analyse grammaticale : Sur la base des résultats de l'analyse lexicale, l'analyse grammaticale détermine principalement si l'instruction SQL que vous avez saisie est correcte et conforme à la syntaxe MYSQL. Si votre instruction est incorrecte, vous recevrez "Vous avez une erreur dans". votre syntaxe SQL" message d'erreur.

Le programme d'analyse lexicale décompose l'intégralité de l'instruction de requête en différents types d'indicateurs, et l'analyse syntaxique convertit les « différents types d'indicateurs » en combinaisons significatives pour MySQL en fonction du langage système défini. Enfin, le système génère un arbre syntaxique (AST), qui est la structure de données sur laquelle s'appuie l'optimiseur.

5. Optimiseur

Après avoir passé l'analyseur, MySQL saura ce que vous voulez faire. Avant le début de l'exécution, il doit être traité par l'optimiseur.

Pourquoi avez-vous besoin d'un optimiseur ?

  • L'optimiseur contient de nombreuses techniques d'optimisation complexes, qui sont souvent plus complexes que celles des meilleurs programmeurs. L'optimisation automatique du système équivaut à rendre ces technologies d'optimisation accessibles à tous.

  • L'optimiseur peut obtenir de nombreuses informations statistiques à partir du dictionnaire de données, comme le nombre de lignes dans le tableau, la répartition de chaque colonne dans le tableau, etc. Optimiseur L'optimiseur peut considérer des centaines de plans d'exécution différents, alors que les programmeurs ne peuvent généralement considérer qu'un nombre limité de possibilités

  • peuvent choisir un plan d'exécution efficace basé sur ces informations, mais il est difficile pour les programmes utilisateurs de l'obtenir ; information ;

En bref, l'optimiseur modifie la forme de l'arbre d'analyse, change l'arbre d'analyse en arbre de requête et détermine le plan d'exécution.

6. Exécuteur

MySQL sait ce que vous voulez faire via l'analyseur et comment le faire via l'optimiseur, il entre donc dans la phase d'exécution et commence à exécuter les instructions.

Lors du démarrage de l'exécution, vous devez d'abord vérifier si l'utilisateur a l'autorisation d'exécuter la requête. Sinon, une erreur d'absence d'autorisation sera renvoyée. S'il en a l'autorisation, il appellera l'interface du moteur et renverra le résultat de l'exécution de l'interface.

7. Analyse de l'instruction

Nous utilisons l'instruction de requête SQL réelle suivante pour analyser le processus d'exécution de la requête MYSQL

select id,name,sex,phoone from user t where t.age='26' and t.account='javadaily'
  • Tout d'abord, le client doit se connecter à la base de données si le mot de passe du compte est incorrect. Le message d'erreur sera renvoyé directement. S'il est correct, passez à l'étape suivante.

  • Avant MYSQL8.0, il allait d'abord dans le cache de requêtes et utilisait cette instruction SQL comme clé pour demander s'il y a un résultat dans la mémoire. S'il y a un résultat, il déterminera d'abord s'il a l'autorisation. . S'il a l'autorisation, il reviendra au client, sinon une erreur sera signalée ; S'il n'y a aucun résultat du cache de requêtes, passez à l'étape suivante

  • Effectuez une analyse lexicale via l'analyseur et extrayez les éléments clés. de l'instruction SQL. Par exemple, l'instruction ci-dessus est une sélection de requête et le nom de la table qui doit être interrogé est user code>, les colonnes à interroger sont <code>id,name,sex, phone, et les conditions de requête sont age=26 et account=javadailly. Déterminez ensuite si l'instruction SQL contient des erreurs de syntaxe, par exemple si les mots clés sont corrects, etc. S'il n'y a pas de problème, passez à l'étape suivante. user,需要查询的列为id,name,sex,phoone,查询条件是age=26 和account=javadailly。然后判断这个sql语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。

  • 上面的SQL有两种执行方案,优化器根据自己的优化算法选择执行效率最高的a方案(统计信息不准可能导致优化器选择错误的执行方案),确定了优化方案后就开始执行。
    a. 先查询 account=javadaily 的用户,然后判断 age 是否等于26 b. 先找出 age=26 的用户,再查询 account=javadaily

  • Le SQL ci-dessus a deux plans d'exécution. L'optimiseur sélectionne le plan A avec l'efficacité d'exécution la plus élevée en fonction de son propre algorithme d'optimisation (des informations statistiques inexactes peuvent amener l'optimiseur à choisir le mauvais plan d'exécution). déterminé, commencez à mettre en œuvre.
    a. Interrogez d'abord l'utilisateur de account=javadaily, puis déterminez si age est égal à 26. b Recherchez d'abord l'utilisateur de age. =26 Utilisateur, puis interrogez l'utilisateur

de account=javadaily pour la vérification de l'autorisation, s'il existe une autorisation de requête, appelez l'interface du moteur de base de données pour renvoyer le résultat de l'exécution ; une erreur sera signalée.

Apprentissage recommandé : 🎜Tutoriel vidéo mysql🎜🎜

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer