2009-11-17 10 views
11

J'ai deux choix pour écrire une instruction SQL avec la fonction COUNT.Performances de la fonction COUNT SQL

  1. SELECT COUNT(*) FROM <table_name>
  2. SELECT COUNT(some_column_name) FROM <table_name>

En termes de performance, quelle est la meilleure instruction SQL? Puis-je obtenir un gain de performance en utilisant l'option 1?

+0

SQL Server? MySQL? – gbn

+0

J'utilise MS SQL Server 2005 –

Répondre

20

Performance ne devrait pas d'importance parce qu'ils font 2 agrégats différents

  • COUNT(*) est toutes les lignes, y compris NULLs
  • COUNT(some_column_name), exclut NULL en question "some_column_name"

Voir la "Count(*) vs Count(1)" pour plus

+2

ils ne sont pas différents dans le cas des clés primaires ou des colonnes non nulles. – Borys

+0

@Borys: Vous obtiendrez le même nombre. Mais la clé primaire aura un indice = meilleur. La colonne "colonne non null" peut ne pas. Bien sûr, cela n'a pas d'importance, mais généralement – gbn

2

Non, il n'y a pas de gain de performance dans Sql Server.

4

L'option 2 compte réellement tous les champs où some_column_name n'est pas nul. L'option 1 compte tous les champs où un champ n'est pas nul. Vous pouvez donc obtenir des résultats différents sur ces deux requêtes. La plupart du temps que vous voulez réellement compter toutes les lignes, puis l'option la plus rapide, qui ne vérifie pas l'un des champs, est tout simplement SELECT COUNT(1) FROM ...

+1

Voir pour COUNT (*) vs COUNT (1) http://stackoverflow.com/questions/1221559/ – gbn

+0

Count (*) compte aussi TOUTES les lignes, pas seulement les lignes où une valeur est pas nul. Et en termes de performances, Count (*) et Count (1) sont identiques, car l'optimiseur de requête reconnaît ce que vous essayez de faire et génère le même plan d'exécution. –