Hola, en eso caso es un poco mejor y si parecen mas

(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 = 109 ms,  elapsed time = 121 ms.


El 16/08/07, Pablo A. Allois <[EMAIL PROTECTED]> escribió:
> Maxi,
>
>        La prueba la hiciste sobre count(*)  y count(id).
>        Y si la haces entre count(*)  y count(1) ... Que da ?
>
>
> Saludos!
>
> -----Mensaje original-----
> De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Maxi Accotto
> Enviado el: Jueves, 16 de Agosto de 2007 03:42 p.m.
> Para: [EMAIL PROTECTED]
> Asunto: [dbms] count(*) vs. count(1)
>
> 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
> >
> >
>
>
> --
>
>
>


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

Responder a