Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :le moyen le plus rapide de compter le nombre de lignes

Lorsque vous COUNT(*) il prend en compte les index de colonne, ce sera donc le meilleur résultat. Mysql avec MyISAM moteur stocke en fait le nombre de lignes, il ne compte pas toutes les lignes chaque fois que vous essayez de compter toutes les lignes. (basé sur la colonne de la clé primaire)

Utiliser PHP pour compter les lignes n'est pas très intelligent, car vous devez envoyer des données de mysql à php. Pourquoi le faire alors que vous pouvez obtenir la même chose du côté mysql ?

Si le COUNT(*) est lent, vous devez exécuter EXPLAIN sur la requête, et vérifiez si les index sont vraiment utilisés, et où doivent-ils être ajoutés.

Ce qui suit n'est pas le plus rapide façon, mais il y a un cas où COUNT(*) ne correspond pas vraiment - lorsque vous commencez à regrouper les résultats, vous pouvez rencontrer un problème, où COUNT ne compte pas vraiment toutes les lignes.

La solution est SQL_CALC_FOUND_ROWS . Ceci est généralement utilisé lorsque vous sélectionnez des lignes mais que vous avez encore besoin de connaître le nombre total de lignes (par exemple, pour la pagination). Lorsque vous sélectionnez des lignes de données, ajoutez simplement le SQL_CALC_FOUND_ROWS mot-clé après SELECT :

SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

Après avoir sélectionné les lignes nécessaires, vous pouvez obtenir le nombre avec cette requête unique :

SELECT FOUND_ROWS();

FOUND_ROWS() doit être appelée immédiatement après la requête de sélection de données.

En conclusion, tout se résume en fait au nombre d'entrées que vous avez et au contenu de l'instruction WHERE. Vous devez vraiment faire attention à la façon dont les index sont utilisés, lorsqu'il y a beaucoup de lignes (des dizaines de milliers, des millions et plus).