jetez un œil aux articles de blog suivants :
1) COUNT(***) vs COUNT(col)
2) Conseils de performance faciles pour MySQL
3) Comptage rapide(*) pour InnoDB
btw, quel moteur utilisez-vous?
MODIFIÉ : À propos de la technique pour accélérer le comptage lorsque vous avez juste besoin de savoir s'il y a un certain nombre de lignes. Désolé, j'ai eu tort avec ma requête. Ainsi, lorsque vous avez juste besoin de savoir, s'il y a par ex. 300 lignes par condition spécifique, vous pouvez essayer la sous-requête :
select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
vous minimisez d'abord le jeu de résultats, puis comptez le résultat ; il analysera toujours le jeu de résultats, mais vous pouvez le limiter (une fois de plus, cela fonctionne lorsque la question à la base de données est "est ici plus ou moins de 300 lignes) et si la base de données contient plus de 300 lignes qui satisfont à la condition que la requête est plus rapide
Résultats des tests (mon tableau contient 6,7 millions de lignes) :
1) SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
renvoie 4,2 millions pendant 65,4 secondes
2) SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
renvoie 100 pendant 0,03 seconde
Vous trouverez ci-dessous le résultat de la requête d'explication pour voir ce qui s'y passe :
EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result