Maison >base de données >tutoriel mysql >Pourquoi SQL COUNT(*) est-il lent et comment puis-je l'accélérer ?
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 :
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
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
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!