[MySQL] Compter le nombre de lignes d'une table le plus vite possible
par
, 28/04/2023 à 08h43 (1075 Affichages)
Une question du forum MySQL, « Comment obtenir le nombre de lignes d'une table le plus rapidement possible ? »
Il est vrai que InnoDB n'est pas performant pour cet exercice, bien moins que MyISAM qui stockait le nombre de lignes en dur.
Entre des tables à balayer ou des choix d'index hasardeux (faîtes un EXPLAIN pour voir ça), sur des tables volumineuses le résultat peut arriver en une fraction de secondes, ou plus d'une minute !
J'ai retenu 3 requêtes pour obtenir une valeur exacte plus rapidement qu'avec un simple SELECT ALL COUNT(*) FROM my_table;.
1. -- On triche un peu pour forcer l'utilisation de l'index de clef primaire :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT ALL COUNT(*) FROM your_table WHERE id > 0; -- On cherche à utiliser l'index de la clef primaire
2. -- Celle-ci devrait donner un résultat similaire, mais ce n'est pas toujours le cas, alors il faut tester :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT ALL COUNT(*) FROM your_table USE INDEX (PRIMARY); -- On utilise l'index de la clef primaire
3. -- Étonnant, mais plutôt qu'un mauvais choix d'index, balayer simplement la table peut s'avérer plus rapide. À tester également :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT ALL COUNT(*) FROM your_table USE INDEX (); -- Index désactivés
Bonus -- Pour un résultat immédiat, avec InnoDB le prix à payer est la précision. Si un résultat approximatif suffit, on peut aussi interroger information_schema :
Avez-vous d'autres astuces ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT ALL TABLE_ROWS FROM information_schema.TABLES WHERE (TABLE_SCHEMA, TABLE_NAME) = ('your_db', 'your_table');