J'ai essayé quelques SELECT COUNT(*) FROM MyTable
vs SELECT COUNT(SomeColumn) FROM MyTable
avec différentes tailles de tables, et où le SomeColumn
une fois est une colonne de clé de clustering, une fois dans un index non clusterisé et une fois dans aucun index.
Dans tous les cas, avec toutes les tailles de tables (de 300'000 lignes à 170 millions de lignes), je ne vois jamais de différence en termes de vitesse ou de plan d'exécution - dans tous les cas, le COUNT
est géré en effectuant une analyse d'index clusterisé --> c'est-à-dire en analysant toute la table, en gros. S'il y a un index non clusterisé impliqué, alors l'analyse est sur cet index - même en faisant un SELECT COUNT(*)
!
Il ne semble pas y avoir de différence en termes de vitesse ou d'approche de la façon dont ces choses sont comptées - pour les compter toutes, SQL Server a juste besoin d'analyser toute la table - point final.
Les tests ont été effectués sur SQL Server 2008 R2 Developer Edition