6.9 Cache de requêtes MySQL
6 Référence du langage MySQL
Manuel de Référence MySQL 4.1 : Version Française
->Comment fonctionne le cache de requêtes . Configuration du cache de requêtes . Options relatives au cache de requêtes dans un SELECT . Status du cache de requêtes et maintenance
|
6.9.1 Comment fonctionne le cache de requêtes Les requêtes sont comparées avant d'être analysées :
et
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 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é.
|