¿Alguien puede decirme la diferencia entre select count (*) y count (1) en sql server?


Mejor respuesta

Ya hay algunas buenas respuestas aquí, pero desafortunadamente, algunos están equivocados.

El 1 en COUNT (1) es solo una expresión constante literal, no tiene nada que ver con la Columna 1 de la tabla. Dará la misma respuesta que COUNT (*), y tiene el mismo plan de ejecución. La consulta contará las filas en el índice no agrupado más pequeño para minimizar la E / S requerida.

COUNT (Col) (para una columna anulable) se encontrará contando las filas en el índice más pequeño que incluye Col, si no está en ningún índice, se requiere un escaneo de tabla. Si Col está en la clave o índice agrupado, también forma parte de todos los demás índices, por lo que se analizará el índice no agrupado más pequeño en lugar de un análisis de tabla agrupada.

Si la columna de destino NO es NULL, entonces COUNT (Col) es idéntico a COUNT (*) y se encontrará nuevamente escaneando el índice no agrupado más pequeño, incluso si Col no está en ningún índice.

Estas declaraciones se basan en planes de ejecución estimados de varias consultas en un servidor SQL 2014, los optimizadores de consultas para versiones anteriores o más recientes pueden funcionar de manera diferente. Es posible que descubra que aprender a leer los planes de ejecución puede enseñarle mucho más sobre cómo se ejecutan las consultas que tratar de averiguar qué respuesta publicada aquí es más precisa.

Respuesta

El parámetro a la función COUNT es una expresión que se evaluará para cada fila. La función COUNT devuelve el número de filas para las que la expresión se evalúa como un valor no nulo. (* es una expresión especial que no se evalúa, simplemente devuelve el número de filas).

Hay dos modificadores adicionales para la expresión: ALL y DISTINCT. Éstos determinan si se descartan los duplicados. Dado que ALL es el valor predeterminado, su ejemplo es el mismo que count (ALL 1), lo que significa que se conservan los duplicados.

Dado que la expresión «1» se evalúa como no nula para cada fila, y dado que no están eliminando duplicados, COUNT (1) siempre debe devolver el mismo número que COUNT (*).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *