Hola Diego! como me hacen laburar ustedes che ;-)
Lo mejor en estos casos es probar, pero para poder ver resultados
necesitamos un numerito de registros ;), aca te muestro lo que testie
y es justamente lo contrario a lo que tu amigo indica (luego explico
la logica)

Vayamos al codigo:

USE NORTHWIND
GO

CREATE TABLE TEST (ID INT, FECHA DATETIME)
GO

DECLARE @N INT
SET @N = 1

WHILE @N < 1000000
   BEGIN
    INSERT INTO TEST VALUES (@N,DATEADD(SS,@N,GETDATE()))
    SET @N = @N+1
   END
go



En primer instancia creamos una tablita y le insertamos 1M de
registros, es un numero que por lo menos nos permitira ver algo :)

Luego que tenemos esto prendemos estos 2 contadores

SET STATISTICS IO ON
SET STATISTICS TIME ON

y por ultimo ejecutamos las querys

SELECT COUNT(*)  FROM TEST
select COUNT(id) FROM TEST

Ahora veamos los resultados :)

SQL Server parse and compile time:
   CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)

Table 'TEST'. Scan count 1, logical reads 2725, physical reads 0,
read-ahead reads 0.

SQL Server Execution Times:
   CPU time = 120 ms,  elapsed time = 120 ms.

(1 row(s) affected)

Table 'TEST'. Scan count 1, logical reads 2725, physical reads 0,
read-ahead reads 0.

SQL Server Execution Times:
   CPU time = 281 ms,  elapsed time = 289 ms.


Como se puede observar en lo que es lecturas de IO estamos parejos :)
el tema esta mal en lo que es tiempos de procesador, la segunda
consulta demoro mucho mas que la primera.
Porque sucede esto, el Count(*) no incluye los valores nulos y el
count(id) si los incluye, esto requiere un sobreproceso. :)

Como comentario, es muy pero muy mala idea usar Count(*) pero no
porque sea mas lento sino porque no te retorna los nulos y esto te
puede traer serios problemas.

Abrazo


-----------------------------------------------------------
Microsoft MVP en SQL Server
Mentor asociado en SQLTotalConsulting
 (excelencia en servicios y consultoria  SQLServer)
Orador Culminis - Microsoft Influencier
www.sqltotalconsulting.com
-----------------------------------------------------------


El 16/08/07, Diego Jancic <[EMAIL PROTECTED]> escribió:
> Hola gente!,
>
> Pregunta detallista: Tengo un conocido que me dice que el count(1) es
> mas eficiente que el count(*), pero por otro lado no conozco a nadie
> que lo utilize (incluso NHibernate usa el * cuando lo tiene que
> hacer..)... ustedes que dicen??
>
> Gracias,
> Diego
>
>


--

Responder a