Administration du serveur
<<<
Comment fonctionne le cache de requêtes Options relatives au cache de requêtes dans un SELECT
>>>

5.10 Cache de requêtes MySQL
5 Administration du serveur
 Manuel de Référence MySQL 4.1 : Version Française

->Comment fonctionne le cache de requêtes
Options relatives au cache de requêtes dans un SELECT
Configuration du cache de requêtes
Status du cache de requêtes et maintenance

5.10.1 Comment fonctionne le cache de requêtes

Les requêtes sont comparées avant d'être analysées :

SELECT * FROM table
et

Select * from table
sont considérées comme des requêtes différentes par le cache, ce qui fait que les requêtes doivent être les mêmes (caractère à caractère) pour être considérées comme identiques. De plus, les requêtes peuvent être considérées comme différentes si par exemple, un client utilise un nouveau format de protocole de communication ou un jeu de caractères différent d'un autre client.

Les requêtes qui utilisent différentes bases de données, différentes versions de protocole ou différents jeux de caractères par défaut sont considérées comme différentes et mises en cache séparément.

Le cache ne fonctionne pas pour les requêtes de type SELECT CALC_ROWS ... et SELECT FOUND_ROWS() ... car le nombre de lignes retournées est aussi mis en cache.

Si un résultat de requête a été retourné depuis le cache de requête, alors la variable Com_select ne sera pas incrémenté, mais Qcache_hits le sera. Status et maintenance du cache de requêtes .

Si une table change ( INSERT , UPDATE , DELETE , TRUNCATE , ALTER ou DROP TABLE|DATABASE ), alors toutes les requêtes mises en cache qui utilisaient cette table deviennent obsolètes et en sont retirées.

Les tables transactionnelles InnoDB qui ont été modifiées seront rendues obsolètes lorsqu'un COMMIT sera exécuté.

Une requête ne peut être mise en cache si elle contient l'une des fonctions suivantes :
Fonction Fonction Fonction
Fonctions définies par l'utilisateur CONNECTION_ID FOUND_ROWS
GET_LOCK RELEASE_LOCK LOAD_FILE
MASTER_POS_WAIT NOW SYSDATE
CURRENT_TIMESTAMP CURDATE CURRENT_DATE
CURTIME CURRENT_TIME DATABASE
ENCRYPT (avec un seul paramètre) LAST_INSERT_ID RAND
UNIX_TIMESTAMP (sans paramètres) USER BENCHMARK

Une requête ne peut être mise en cache non plus, si elle utilise une variable définie par l'utilisateur, si elle opère sur les tables système de MySQL, est de la forme SELECT ... IN SHARE MODE ou de la forme SELECT * FROM AUTOINCREMENT_FIELD IS NULL (pour obtenir l'index du champ auto-increment - utilisé par ODBC).

Par contre, FOUND ROWS() retournera une valeur correcte, même si la requête précédente à utilisé le cache.

Dans les cas où la requête n'utilise aucune table, en utilise une temporaire, ou que l'utilisateur à un droit particulier sur l'une des tables concernées, celle ci ne sera pas mise en cache.

Avant chaque lecture à partir du cache, MySQL vérifie que l'utilisateur à le droit de lecture (SELECT) sur toutes les bases et les tables concernées. Si ce n'est pas le cas, le cache ne sera pas utilisé.

<< Comment fonctionne le cache de requêtes >>
Administration du serveur Cache de requêtes MySQL Options relatives au cache de requêtes dans un SELECT