registros entre ejemplos diferencia cuál contar column and agrupados sql

entre - sum as sql



En SQL, ¿cuál es la diferencia entre count(*) y count(''x'')? (5)

Esta pregunta ya tiene una respuesta aquí:

Tengo el siguiente código:

SELECT <column>, count(*) FROM <table> GROUP BY <column> HAVING COUNT(*) > 1;

¿Hay alguna diferencia con los resultados o el rendimiento si reemplazo el COUNT (*) con COUNT (''x'')?

(Esta pregunta está relacionada con una anterior )


Decir que SELECT COUNT(*) vs COUNT(1) hace que el DBMS que devuelve "columns" sea pura litera. Ese puede haber sido el caso hace mucho tiempo, pero cualquier optimizador de consultas que se precie elegirá algún método rápido para contar las filas en la tabla - NO hay diferencia de rendimiento entre SELECT COUNT(*), COUNT(1), COUNT(''this is a silly conversation'')

Además, SELECT(1) vs SELECT(*) NO tendrá ninguna diferencia en el uso del ÍNDICE - la mayoría de los DBMS realmente optimizará SELECT( n ) into SELECT(*) todos modos. Vea ASK TOM: Oracle ha estado optimizando SELECT(n) into SELECT(*) durante la mayor parte de una década, si no más: http://asktom.oracle.com/pls/asktom/f?p=100: 11: 0 :::: P11_QUESTION_ID: 1156151916789

el problema está en la conversión de recuento (col) a recuento ( ) ** 03/23/00 05:46 pm *** una solución alternativa es establecer el evento 10122 para desactivar la optimización de recuento (col) -> recuento ( ). Otra solución alternativa es cambiar el conteo (col) por contar ( ), significa lo mismo, cuando el col tiene una restricción NOT NULL. El número de error es 1215372.

Una cosa a tener en cuenta: si está usando COUNT (col) (do not!) Y col se marca NULL, entonces realmente tendrá que contar el número de ocurrencias en la tabla (ya sea a través de escaneo de índice, histograma, etc. existen, o una exploración de tabla completa de lo contrario).

En pocas palabras: si lo que quieres es el recuento de filas en una tabla, usa COUNT (*)


La principal diferencia de rendimiento es que COUNT (*) se puede satisfacer examinando la clave primaria en la tabla.

es decir, en el caso simple a continuación, la consulta volverá inmediatamente, sin necesidad de examinar ninguna fila.

select count(*) from table

No estoy seguro de si el optimizador de consultas en SQL Server lo hará, pero en el ejemplo anterior, si la columna en la que está agrupando tiene un índice, el servidor debería poder satisfacer la consulta sin tocar la tabla en sí.

Para aclarar: esta respuesta se refiere específicamente a SQL Server. No sé cómo otros productos DBMS manejan esto.




Esta pregunta es ligeramente diferente a la otra referencia. En la pregunta a la que se hace referencia, se preguntó cuál era la diferencia al usar count (*) y count (SomeColumnName), y la respuesta de SQLMenace fue inmediata .

Para abordar esta cuestión, esencialmente no hay diferencia en el resultado. Tanto el recuento (*) como el recuento (''x'') y el conteo (1) devolverán el mismo número. La diferencia es que cuando se usa "*" como en un SELECCIONAR, todas las columnas se devuelven y se cuentan. Cuando se utiliza una constante (por ejemplo, ''x'' o 1), se devuelve una fila con una columna y luego se cuenta. La diferencia de rendimiento se verá cuando "*" devuelva muchas columnas.

Actualización : la afirmación anterior sobre el rendimiento probablemente no sea del todo correcta, como se explica en otras respuestas, pero se aplica a las consultas de subselección cuando se usa EXISTS y NO EXISTE