IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Séb.

[MySQL] Compter le nombre de lignes d'une table le plus vite possible

Noter ce billet
par , 28/04/2023 à 08h43 (802 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 :

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');
Avez-vous d'autres astuces ?

Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Viadeo Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Twitter Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Google Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Facebook Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Digg Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Delicious Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog MySpace Envoyer le billet « [MySQL] Compter le nombre de lignes d'une table le plus vite possible » dans le blog Yahoo

Tags: mysql, sql
Catégories
Programmation

Commentaires

  1. Avatar de CinePhil
    • |
    • permalink
    Pourquoi faire SELECT ALL COUNT(*) alors que SELECT COUNT(*) est suffisant ?
  2. Avatar de Séb.
    • |
    • permalink
    Citation Envoyé par CinePhil
    Pourquoi faire SELECT ALL COUNT(*) alors que SELECT COUNT(*) est suffisant ?
    ALL est le modificateur par défaut, et j'ai l'habitude de spécifier les valeurs par défaut même si, comme ici, ça ne change rien au résultat
  3. Avatar de ASSOGBA Jean
    • |
    • permalink
    Bonsoir à vous
    Svp monsieur je veux savoir si il s'agit du code de langage Java
  4. Avatar de Séb.
    • |
    • permalink
    Citation Envoyé par ASSOGBA Jean
    Svp monsieur je veux savoir si il s'agit du code de langage Java
    Ce n'est pas du Java, mais du SQL.