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 -----------------------------------------------------------
