8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je viens vers vous (longtemps que je suis plus venu sur le forum, c'est beau, le nouveau design) pour une petite question concernant la mise en cache des requêtes MySQL, avec le mot-clé SQL_CACHE.

Pour un projet de site assez gros, je veux pousser l'optimisation au mieux, ce qui est déjà fait côté serveur et client, il me reste à affiner les requêtes SQL, tâche déjà bien entamée, jusqu'à ce que je trouve, au gré de mes recherches, cette fonction de caching.

Autant pour des requêtes avec des jointures et pas mal de résultats, le caching est intéressant, autant je me demande si le caching est utile pour des éléments uniques.

Je m'explique : mon site contiendra certaines données qui ne seront pas dynamiques, typiquement des fiches de données sur des objets, fiches qui ne changeront pas une fois encodées.
D'où ma question : niveau performance, est utile de mettre en cache les requêtes SQL ne retournant qu'une rangée, genre 'SELECT * FROM objets WHERE objet_id=23' (je sais, le select * n'est pas bon, c'est pour l'exemple, dans mon code c'est optimisé).

Merci d'avance et bonne journée à tous,
Administrateur
Par défaut elles sont déjà placées en cache mais cela dépend d'un grand nombre de paramètres (dont certains que l'on peut trouver dans my.cnf comme key_buffer, query_cache_limit, query_cache_size...). En général on se sert plutôt de SQL_NO_CACHE pour exprimer le souhait de ne pas cacher une requête. Dans ton cas, il peut être plus intéressant d'optimiser le cache au niveau des dates d'expiration http et des fichiers pour ne pas avoir à re-générer le document.
La cache mysql est activée en mode "DEMAND", donc c'est moi qui doit l'indiquer (c'est un choix pleinement assumé).

Concernant les header http et tout le reste, c'est déjà configuré, mais les pages qui appellent ces objets contiennent des éléments un peu plus changeants, tels des commentaires ou autres infos...

D'où ma demande de l'utilité d'un cache sur la requête, est-ce pertinent ici ?
Administrateur
Je pense que tu as déjà placé un bon index (à vérifier avec EXPLAIN)... Dans ce cas, je ne connais pas la différence de performance.