Maison  >  Article  >  base de données  >  Quel est le principe de la mise en cache des requêtes de la base de données MySQL

Quel est le principe de la mise en cache des requêtes de la base de données MySQL

coldplay.xixi
coldplay.xixioriginal
2020-10-26 11:58:113718parcourir

Le principe de la mise en cache des requêtes de base de données MySQL est le suivant : 1. Mettez en cache l'ensemble de résultats et l'instruction SQL de l'opération SELECT, la clé est sql et la valeur est l'ensemble de résultats de la requête 2. S'il s'agit d'une nouvelle instruction SELECT ; arrive, utilisez ce SQL comme clé de requête dans le cache, et s'il y a une correspondance, renvoyez le jeu de résultats mis en cache.

Quel est le principe de la mise en cache des requêtes de la base de données MySQL

Le principe de mise en cache des requêtes de la base de données MySQL est :

Vue d'ensemble

Query Cache (QC en abrégé) stocke les instructions SELECT et les résultats de données qu'elles génèrent. Je n'ai rien à faire, j'aimerais donc résumer ce sujet et faire un mémo !

Résumé super détaillé du cache de requêtes de la base de données MySQL, qui vaut la peine d'être collecté

Quel est le principe de la mise en cache des requêtes de la base de données MySQL

Principe de fonctionnement

  • Mettez en cache l'ensemble de résultats et l'instruction SQL de l'opération SELECT, la clé est sql et la valeur est l'ensemble de résultats de la requête

  • Si une nouvelle instruction SELECT arrive, utilisez ce sql ; comme clé à interroger dans le cache, si elle correspond, renvoie l'ensemble de résultats mis en cache

  • Critères de correspondance : si elle est exactement la même que l'instruction SQL mise en cache ; Le respect de la casse et les espaces au milieu sont simplement compris comme Une structure clé-valeur est stockée. La clé est SQL et la valeur est le résultat de la requête SQL. La chaîne Java égale à () est utilisée lors de la correspondance, par exemple :

  • sélectionnez l'âge de l'utilisateur et sélectionnez AGE de l'utilisateur ne correspondra pas car le cas est différent

  • sélectionnez l'âge de l'utilisation et sélectionnez l'âge de l'utilisateur ne correspondra pas ; parce que les espaces sont différents ;

  • Les espaces des deux côtés du sql peuvent être ignorés. On peut considérer que la clé est tronquée puis comparée à des égales.

Afficher les paramètres de configuration de MySQL

Exécuter

afficher les variables telles que '%query_cache%';

Quel est le principe de la mise en cache des requêtes de la base de données MySQL

Vous pouvez voir les paramètres pertinents :

  • query_cache_type : 0-Ne pas activer le cache de requêtes, 1-Activer, 2-Activer, la valeur par défaut est ; 0;

  • query_cache_size : définit la taille totale de la zone de cache. La valeur minimale autorisée est de 40 Ko. Le paramètre recommandé est : 64 M/128 M ; >

  • query_cache_limit : limite la taille maximale d'un seul ensemble d'enregistrements de requête pouvant être mis en cache dans la zone de cache. Le paramètre par défaut est 1M

  • Lorsque query_cache_type. est 1, tant que les exigences du cache de requête sont remplies, les instructions et enregistrements de requête du client Tous les ensembles peuvent être mis en cache. Si SQL_NO_CACHE est ajouté à SQL, il ne sera pas mis en cache ; query_cache_type est 2, tant que le paramètre : SQL_CACHE est ajouté à SQL et répond aux exigences de mise en cache des requêtes, le client Les instructions de requête et les jeux d'enregistrements sur le client peuvent être mis en cache.

  • Afficher l'utilisation du cache

afficher l'état comme '%Qcache%%';

Vous pouvez voir les paramètres pertinents :

Quel est le principe de la mise en cache des requêtes de la base de données MySQL

Qcache_hits : le nombre de hits du cache

  • Qcache_inserts : le nombre d'insertions dans le cache ; , plus chaque cache 1. Notez qu'il ne s'agit pas de la quantité de cache

  • Activer le cache de requêtes

Définissez l'option query_cache_type = 1 et définissez query_cache_size = 67108864;

Remarque : La valeur de query_cache_size peut être définie dans les 100 Mo. Dans MySQL, le cache de requêtes est contrôlé par un verrou global, et chaque fois que le bloc mémoire du cache de requêtes est mis à jour, il doit être verrouillé.

Désactivez la mise en cache des requêtes

Définissez l'option query_cache_type = 0 et définissez query_cache_size = 0.

Scénarios applicables

Utilisé pour les scénarios dans lesquels la même instruction est fréquemment soumise et les données du tableau ne changent pas très fréquemment, comme certaines pages statiques ou un certain bloc de la page Informations qui changent rarement.

Étant donné que le cache de requêtes doit mettre en cache les derniers résultats de données, toute modification apportée aux données de la table (insertion, mise à jour, suppression ou autres opérations pouvant produire des modifications de données) entraînera l'actualisation du cache de requêtes. Par conséquent, pour un scénario dans lequel la fréquence de mise à jour est très faible et la fréquence des requêtes en lecture seule est très élevée, il est plus avantageux d’activer le cache de requêtes.

Scénarios non applicables

Le cache de requêtes exige strictement que les deux requêtes SQL soient exactement les mêmes, y compris les instructions SQL, les bases de données connectées, les versions de protocole, les jeux de caractères et d'autres facteurs affecteront tous. Voici plusieurs scénarios dans lesquels la mise en cache des requêtes n'est pas applicable :

sous-requête

  • SQL appelé dans les procédures, fonctions, déclencheurs et événements , ou reportez-vous à ces résultats ;

  • Lorsque la requête implique des fonctions spéciales, telles que : BENCHMARK(), CURDATE(), CURRENT_TIME(), CURRENT_TIMESTAMP(), NOW(), SLEEP ; (), CONNECTION_ID(), CURRENT_DATE(), CURRENT_USER(), PASSWORD(), RAND(), UUID(), ENCRYPT(), LAST_INSERT_ID(), etc.;
  • La requête implique MySQL, information_schema ou performance_schema.

  • Requêtes similaires à SELECT…LOCK IN SHARE MODE, SELECT…FOR UPDATE, SELECT..INTO OUTFILE/DUMPFILE, SELECT * FROM ... WHERE autoincrement_col IS NULL

  • Le plan d'exécution SELECT utilise des tables temporaires

  • Requêtes qui ne font référence à aucune table, telles que SELECT 1+2 ; >

    La requête a généré des avertissements ;

  • Le mot-clé SQL_NO_CACHE existe dans l'instruction SELECT

  • implique une table partitionnée.

  • Plus de recommandations d'apprentissage gratuites associées :

tutoriel mysql(vidéo)

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn