No es al revés? El Conut(*) te cuenta todos los registros sean nulos o no? Y cuando usas Count(nombreColumna) solo cuenta las filas donde ese campo no sea nulo?
-----Original Message----- From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maxi Accotto Sent: Jueves, 16 de Agosto de 2007 15:42 To: Guillermo Estevez Subject: [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 > > --
