Saviez-vous que MySQL implémentait depuis la version 4.0 un système de cache des requètes ? Mais savez-vous l’utiliser ? Voilà un petit guide de son fonctionnement et de son utilisation.
__Qu’est-ce que le cache de MySQL ?__ Il s’agit d’un endroit mémoire qu’utilise mysql pour stocker de côté le résultats de certaines requêtes SQL. Ainsi, si une requête mise en cache est redemandée au serveur, celui-ci n’aura pas besoin d’aller interroger les tables et pourra renvoyer le résultat directement depuis le cache. Les gains de vitesse peuvent aller à 238% d’après la doc de mysql ! %%% __Comment l’activer ?__%%% Normalement, le cache est activé par défaut. Voilà comment vérifier que c’est bien le cas :%%% SHOW VARIABLES LIKE ‘have_query_cache’; Si ca vous répond « YES », alors le système de cache est disponible. Mais cela ne veut pas dire qu’il soit actif, nuance ! Pour savoir son état, interroger la variable ‘query_cache_size’ : SHOW VARIABLES LIKE ‘query_cache_size’ Cela vous renvoit la taille du cache (incroyable, n’est-ce-pas ?). Si cette taille est à 0, alors pas de cache. Sinon, le nombre indique le nombre d’octets qui est réservé au cache. Cette taille ne peut être inferieure à 40kb (40*1024). Et dernière étape, vérifier le type d’activation : SHOW VARIABLES LIKE ‘query_cache_type’ * Si = 0, alors pas de cache * Si = 1, le cache est activé, sauf pour les requêtes commencant par « SELECT SQL_NO_CACHE ». * Si = 2, le cache est désactivé par défaut, et activé pour les requêtes commencant par « SELECT SQL_CACHE » %%% __Utilisation du cache__%%% Elle est très simple : si vous executez deux fois la même requête, la 2e fois viendra interroger le cache automatiquement. Seul critère : les deux requêtes doivent être parfaitement identiques, à la lettre près (sensible à la casse également). De plus, il existe des dizaines de petites exceptions à cette règle. La documentation vous les explique toutes, mais en voilà quelques une : * Vous utilisez une fonction demandant une date quelconque (SELECT CURTIME() … ne sera pas mis en cache, et c’est normal) * Votre requête utilise des tables temporaires. * Votre requête n’utilise aucune table (aucun interêt de mettre en cache) Pour tout complément d’info, reportez vous à la doc toujours très complète : [Mysql Documentation – Query Cache|http://dev.mysql.com/doc/refman/5.1/en/query-cache.html|fr]