2009-11-17 23 views
11

Tengo dos opciones al escribir una instrucción SQL con la función COUNT.Rendimiento de la función COUNT SQL

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

En términos de rendimiento, lo que es la mejor instrucción SQL? ¿Puedo obtener alguna ganancia de rendimiento usando la opción 1?

+0

SQL Server? MySQL? – gbn

+0

Estoy usando MS SQL Server 2005 –

Respuesta

20

rendimiento no debería importar porque lo hacen 2 agregados diferentes

  • COUNT(*) es todas las filas, incluidos los nulos
  • COUNT(some_column_name), excluye NULL en "some_column_name"

Véase el "Count(*) vs Count(1)" cuestión para más

+2

no son diferentes en caso de claves primarias o columnas nulas. – Borys

+0

@Borys: obtendrás el mismo conteo. Pero la clave principal tendrá un índice = mejor. La columna "columna no nula" no puede. Por supuesto, puede no importar, pero por lo general lo hará – gbn

2

No, no hay ganancia de rendimiento en el servidor Sql.

4

La opción 2 realmente cuenta todos los campos donde some_column_name no es nulo. La opción 1 cuenta todos los campos donde cualquier campo no es nulo. Por lo tanto, es posible que obtenga resultados diferentes de estas dos consultas. La mayoría de las veces en realidad se desea contar todas las filas, y entonces la opción más rápida, lo que no compruebe si cualquiera de los campos, es simplemente SELECT COUNT(1) FROM ...

+1

Consulte esto para COUNT (*) vs COUNT (1) http://stackoverflow.com/questions/1221559/ – gbn

+0

Count (*) también cuenta TODAS las filas, no solo las filas donde se encuentra cualquier valor no nulo. Y en términos de rendimiento, Count (*) y Count (1) son los mismos, ya que el optimizador de consultas reconoce lo que está intentando hacer y genera el mismo plan de ejecución. –