Astuce MySQL : Accélérer le calcul du nombre de pages

09/06/2007 at 09:59 - [FR]

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 :

mysql> SELECT SQL_CALC_FOUND_ROWS mes_champs_a_selectionner FROM ma_table WHERE ma_condition LIMIT ma_limite;

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 :

mysql> SELECT FOUND_ROWS();

Et voila, cette deuxième requête sera quasi-instantanée. Pas mal non ? ;)

Note: ceci ne marche qu'à partir de MySQL 4.1