Lorsque vous prenez COUNT(*)
en compte les index de colonne, ce sera le meilleur résultat. Mysql avec le moteur MyISAM 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 vers php. Pourquoi le faire alors que vous pouvez réaliser la même chose du côté mysql?
Si le COUNT(*)
est lent, vous devez exécuter EXPLAIN
la requête et vérifier si les index sont réellement utilisés et où les ajouter.
Ce qui suit n'est pas le moyen le plus rapide , mais il y a un cas où COUNT(*)
cela ne convient 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 toujours 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;
Une fois que vous avez sélectionné les lignes nécessaires, vous pouvez obtenir le nombre avec cette seule requête:
SELECT FOUND_ROWS();
FOUND_ROWS()
doit être appelé immédiatement après la requête de sélection des 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).
SELECT 1
et nonSELECT *
. Y a-t-il une différence?