2010-03-03 11 views
3

J'ai une requête MySQL compliquée qui prend beaucoup de temps, en sélectionnant dans une table avec plus de 150k lignes et plusieurs JOINS et sous-requêtes. Je limite la quantité de résultats, mais j'ai besoin de connaître le nombre total de lignes.Compte MySQL nombre total de lignes

Existe-t-il un moyen de ne pas répéter la requête avec COUNT(*) comme champ pour les obtenir? (répéter la requête double presque le temps que le script prend pour terminer)

Répondre

2

Il peut effectivement être plus rapide de faire les deux requêtes (vous pouvez juste faire quelques tests rapides):

Dans tous les cas, essayez de vous assurer que le COUNT (*) peut utiliser l'index (il dira "using index" dans la colonne Extra si vous utilisez la requête EXPLAIN)

Vous pouvez également envisager de mettre en cache le résultat COUNT (*) s'il n'est pas nécessaire d'être exact (comme vous limitez votre résultat).

3

MySQL a une clause appelée SQL_CALC_FOUND_ROWS que vous mettez après SELECT et avant tous les noms de champs. Ensuite, vous appelez une deuxième requête qui est juste SELECT FOUND_ROWS() AS rows et vous donne le nombre de lignes trouvées par la requête précédente.

+0

Plus d'informations à ce sujet: http://dev.mysql.com/doc/refman/4.1/fr/information-functions.html#function_found-rows – cmptrgeekken

Questions connexes