2009-11-08 28 views
17

¿Hay alguna diferencia entre las siguientes consultas, suponiendo que hay un campo primario 'id' en la tabla (como en velocidad, etc.)?COUNT (id) vs. COUNT (*) en MySQL

SELECT COUNT(id) 
    FROM table 

vs

SELECT COUNT(*) 
    FROM table 
+0

Puede consultar estos hilos http://stackoverflow.com/questions/1221559/count-vs-count1 http://stackoverflow.com/questions/433913/in-sql-is-there-a-difference- between-count-and-countfieldname http://stackoverflow.com/questions/59294/in-sql-whats-the-difference-between-countcolumn-and-count –

Respuesta

16

Tener un vistazo a Count(*) vs Count(col) en www.mysqlperformanceblog.com, que discutir este tema de varios tipos 'col' (NO nulo o no, con el índice, etc.) y esto para tablas MyISAM e InnoDB.

2

Sé que la pregunta es acerca de MySQL, pero por lo que vale, se recomienda contar (*) para Oracle: lo que demuestra que esto es específico de la base de datos (ver comentario anterior de BalusC). Dado que muchas bases de datos (MS-SQL, MySQL) tienen tablas de esquema de información que contienen varios tipos de metadatos, es probable que haya diferencias si una sintaxis simplemente busca un valor fácilmente disponible, y otra va directamente a la mesa. . Al final del día: pruebe diferentes opciones, y vea lo que EXPLAIN le está diciendo que está sucediendo detrás de escena.

+1

Me parece cada vez más que el camino a seguir es usar un ORM (y esperar que se optimice para todos los casos), o escribir SQL para exactamente * un * motor de base de datos y olvidarse del resto. –

0

Count (*) Count (Ename) puede mostrar salidas diff porque Ename no es una columna con restricción no nula y sin duda tener algunos valores nulos que no están siendo contados.

Espero que ayude ..!