Astuce MySQL : Accélérer le calcul du nombre de pages
Je travaille actuellement sur un script que tout programmeur PHP a eu à faire un jour : sélectionner des données dans une base (un gros SELECT) et couper les résultats sur plusieurs pages. Quasiment tout le monde utilise deux requêtes : une qui récupère les données avec la clause LIMIT qui va bien, et une autre qui calcule le nombre de résultats de la requête sans le LIMIT. Ca fait chercher 2 fois les infos à MySQL, c'est moche et sur des grosses tables ca peut être assez lent.
La solution consiste à insérer l'option "SQL_CALC_FOUND_ROWS" dans votre première requête ! Par exemple :
On obtient les données de la page demandée (par la clause LIMIT). Reste à savoir le nombre de résultats total, qui a déjà été calculé par MySQL grace à la fameuse option :
Et voila, cette deuxième requête sera quasi-instantanée. Pas mal non ? ;)
Note: ceci ne marche qu'à partir de MySQL 4.1