contar MySQL en (*)

  • Utilizar diferentes motores de almacenamiento

En MySQL, el desarrollo diario de la MyISAM más comúnmente usado y InnoDB dos motores de almacenamiento. Donde una diferencia entre los dos es el recuento de uso (*) función para calcular el número específico de filas de la tabla.

Debido al número específico de filas tablas MyISAM será salvo, por lo que este código se ejecuta el motor de almacenamiento MyISAM, MyISAM simplemente leer un número de filas buena de ahorrar. Por lo tanto, si la tabla no se utiliza como la operación de transacción, esta es la mejor optimización. Sin embargo, el motor de almacenamiento InnoDB no guarda un número específico de filas en la tabla, por lo tanto, la aplicación de este código en el motor de almacenamiento InnoDB, InnoDB nuevo para escanear toda la tabla para calcular el número de filas.

  • count (*) la aplicación del principio de la función

En diferentes motores de almacenamiento, count (*) se ejecuta la función es diferente. En el motor de almacenamiento MyISAM, count (*) es una función directa del número de filas leídas mesa y devolver los datos guardados, y el motor de almacenamiento InnoDB, count (*) es una función para leer los datos en la memoria de tabla entre el inicio buffer, y luego obtener un número de línea escaneo completo de tabla registrada.

Cuando se combina con la condición de uso donde la función de recuento, el efecto de los dos motores de almacenamiento es lo mismo, que escanea toda la tabla con un número de calcular un valor de campo del tema. Cuando el número de filas en el conjunto de resultados de estadísticas con una cláusula WHERE, valores de columna puede ser un número de estadísticas, MyISAM el COUNT () y otro motor de almacenamiento no es diferente, ya no es una velocidad fabuloso.

  • Use aproximaciones

A veces no es necesario por completo valor exacto de COUNT, una aproximación puede ser reemplazado en este momento. EXPLICAR el número de filas de las estimaciones Optimizer es una buena aproximación, la implementación de explicar no necesita realmente para ejecutar la consulta, el costo es muy bajo.

explicar comando es rápido porque realmente no explicar con la ejecución de la consulta, el optimizador de consultas [pero] estimó que el número de filas.

  • Para distinguir entre (diverso uso recuento)

    count (ID clave principal) 

      motor InnoDB atravesará toda la tabla, los valores de ID para cada fila se sacan, regresó a la capa de servidor. Obtener el ID de capa de servidor, el juicio es poco probable que sea vacío, la fila acumulado.

    count (1)

      motor InnoDB recorrer toda la tabla, pero no el valor. Para cada capa de servidor fila devuelta, poner un número "1" en, la determinación es imposible vaciar la fila acumulado.

    count (1) recuento que fue ejecutado (clave primaria id) rápido. Debido a que la operación de retorno Identificación involucrar a la línea de datos analizada, y el valor del campo del motor de copia.

    count (campo)

      Si el "campo" se define como no es nulo, entonces esta línea por línea leída desde el interior campo de la grabación, se determina no es nulo, las filas acumulativos;

      Si se define este "campo" para permitir nula, entonces la aplicación de las veces, el juez podría ser nula, sino también para determinar qué valor se toma de nuevo, no sólo se acumulan nula. 

    Pero la cuenta (*) es una excepción

      Todos los campos no serán sacados, sino específicamente optimizados, no el valor. count (*) ciertamente no es nula, las filas se acumulan.

    Así que la conclusión es: la eficiencia ordenada, a continuación, el recuento (campo) <count (clave primaria id) <count (1) ≈count (*), se recomienda hacer uso de recuento (*) o el recuento (1).

 

El siguiente ejemplo puede optimizar cuenta:

1. En primer lugar tenemos que crear la tabla InnoDB, y contiene un gran campo (o campos que contienen más):

 

CREATE TABLE `qstardbcontent` (
  ` id` BIGINT (20) NOT NULL DEFAULT '0',
  `MEDIUMTEXT contenido en materia,
  ` INT length` (11) NOT NULL DEFAULT '0',
  PRIMARY KEY ( `id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8

 

2. Insertar los datos de 500.000, cada dato de 5K

 

3. ¿select count (*) de qstardbcontent

 

Se puede observar casi 500.000 más datos de contenido para realizar un conteo (*) requeriría mucho tiempo de 13 minutos y 28 segundos

Vamos a ser optimizados, añadir un índice en el campo de longitud, realice SQL: ALTER TABLE CLAVE qstardbcontent ADD (longitud);

 

Después de la finalización de la construcción del índice, y luego ejecutar select count (*) de qstardbcontent;

 

Podemos ver toda la consulta estadística es muy rápido, en sólo 354 milisegundos para completar la investigación.

 

Publicado 21 artículos originales · ganado elogios 0 · Vistas 2257

Supongo que te gusta

Origin blog.csdn.net/hfaflanf/article/details/103702675
Recomendado
Clasificación