La diferencia entre recuento (1), recuento (*) y recuento (nombre de columna)

La diferencia entre contar(1) y contar(*)

función describir
contar(*) Cuente todas las filas, incluidas las filas nulas (COUNT(*) no solo escaneará toda la tabla, sino que también escaneará cada campo de la tabla. Y COUNT('x') o COUNT(COLUMN) o COUNT(0), etc., solo realice un escaneo completo de la tabla de un campo)
contar(1) Calcule el número total de filas calificadas y no ignore los valores nulos (de hecho, se puede entender que existe un campo de este tipo en la tabla, este campo es el valor fijo 1, recuento (1), que es calcular el número total de 1. De la misma manera, contar (2), también es posible, los valores obtenidos son exactamente iguales, contar ('x'), contar ('y') son ambos posibles. (*), cuando se ejecuta, traducirá el asterisco al nombre específico del campo, el efecto es el mismo, pero hay una acción de traducción más, que es un poco menos eficiente que el método de valor fijo).
contar (nombre de la columna) Consulta el recuento del nombre de la columna. Si el campo es nulo, no se contarán estadísticas (nulo aquí no se refiere a la cadena vacía o 0, sino a nulo). Es decir, si el valor de un determinado campo es NULL, no se contarán estadísticas.

1.1 Crear tabla sql

CREATE TABLE Person(
	id int,
	name varchar(20)
)engine myisam charset utf8;

insert into Person 
values(1,'lisi');

insert into Person
values(2,null);

insert into Person
values(null,null);
  1. select * from Person;

imagen.png

  1. select count(*) from Person;

imagen.png

  1. select count(name) from Person;

imagen.png

  1. select count(1) from Person;

imagen.png

1.2 Eficiencia de ejecución

Habrá ligeras diferencias entre los tres según las diferentes situaciones, y MySQL optimizará el recuento (*).
(1) el recuento (*) incluye todas las columnas, lo que equivale al número de filas. Al calcular los resultados, los valores de columna NULL no se ignorarán.
(2) contar (1) incluye ignorar todas las columnas y usar 1 para representar la línea de código. Al contar los resultados, los valores de columna que sean NULL no se ignorarán.
(3) el recuento (nombre de la columna) solo incluye la columna con el nombre de la columna. Al calcular los resultados, se ignorarán los valores de las columnas vacías.
(4) Si la columna es la clave principal, contar(nombre de la columna) es más eficiente que contar(1)
(5) Si la columna no es la clave principal, contar(1) es más eficiente que contar(nombre de la columna)
( 6) Si hay una clave principal en la tabla, el recuento (nombre de la columna de la clave principal) es el más eficiente
(7) Si solo hay una columna en la tabla, el recuento (*) es el más eficiente
(8) Si la tabla tiene varias columnas y no hay una clave principal, entonces contar (1) es más eficiente que contar (*)
(9) contar (1) es lo mismo que contar (clave principal), solo se escanea la clave principal. count(*) es lo mismo que count (clave no principal), escaneando toda la tabla. Evidentemente el primero
es más rápido.
(10) recuento(*) ≈ recuento(1) > recuento(id) > recuento(campo)

Supongo que te gusta

Origin blog.csdn.net/hansome_hong/article/details/127430392
Recomendado
Clasificación