Maison > base de données > tutoriel mysql > Pourquoi SQL COUNT(*) est-il lent et comment puis-je l'accélérer ?

Pourquoi SQL COUNT(*) est-il lent et comment puis-je l'accélérer ?

Barbara Streisand
Libérer: 2024-12-26 20:19:12
original
583 Les gens l'ont consulté

Why is SQL COUNT(*) Slow, and How Can I Speed It Up?

Performance SQL Count(*) : pourquoi c'est lent et comment l'améliorer

Lorsque vous traitez de grandes tables, il est important de comprendre comment certaines requêtes, telles que « COUNT() », affectent les performances. Cet article explique pourquoi une simple requête « COUNT() » peut entraîner des différences de performances significatives en fonction de ses paramètres.

Dans l'exemple donné, la requête « if (select count() from BookChapters) = 0' s'exécute rapidement car SQL Server l'optimise en « s'il existe (sélectionnez dans BookChapters) ». Cette version optimisée analyse une seule ligne au lieu de compter toutes les lignes.

Cependant, les requêtes 'if (select count() from BookChapters) = 1' et 'if (select count( ) de BookChapters) > 1' fonctionne plus lentement car SQL Server utilise une logique différente. Lorsqu'une table ne dispose pas d'index non clusterisés, SQL Server utilise l'index non clusterisé le plus étroit pour les opérations « COUNT(*) ». Sans index non clusterisé, il doit analyser la table entière, ce qui peut prendre beaucoup de temps pour les grands ensembles de données.

Optimisation de la vitesse du nombre (*)

Pour améliorer les performances de 'COUNT(*)' requêtes, envisagez ces stratégies :

  • Ajouter un index : SQL Server peut utiliser un index non clusterisé pour affiner la recherche et réduire l'analyse des tables.
  • Utilisez la table système sysindexes : Cette table fournit le nombre de lignes sans encourir le surcharge d’une analyse complète de la table. Dans SQL Server 2005 ou version ultérieure, utilisez la requête suivante :
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count]
FROM sys.sysindexes i WITH (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rowcnt desc
Copier après la connexion
  • Pour SQL Server 2000 :
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count]
FROM sysindexes i (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rows desc
Copier après la connexion

En utilisant ces techniques, vous pouvez accélérer considérablement le temps d'exécution des requêtes 'COUNT(*)', en particulier sur les requêtes de grande taille. ensembles de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal