Optimizar la consulta de recuento
select count(*) from employees where id > 40000;
optimizarlo a la siguiente declaración
select (select count(*) from employees) - count(*) from employees where id <= 40000;
realizar pruebas
Dado que hay 90551 datos con id> 40000 y 20557 datos con id <40000, ¿se puede optimizar si se realiza una operación de resta?
motor innodb
Diseñar la tabla de empleados como motor InnoDB y comprobar su tiempo de ejecución.
Las dos declaraciones anteriores (15, 16) son la ejecución del motor InnoDB.
Se puede encontrar que después de modificar la declaración original, el tiempo de ejecución cambia de 0.038 s a 0.050 s, que es más lento. Esto no está optimizado para ¿ah?
Utilice la declaración de explicación para ver el plan de ejecución y descubra que la declaración original escaneó 55493 filas de datos, el tipo es rango y se utiliza el índice id_index. Las filas de la declaración modificada SUBQUERY muestran que se han escaneado 110,986 filas de datos en toda la tabla, y las filas de PRIMARY han escaneado 19,623 filas de datos, lo que significa que el recuento (*) en el lado izquierdo del signo menos también escanea toda la tabla, lo cual es imposible en absoluto optimización.
Oración original:
Declaración modificada:
motor MyISAM
Después de modificar la tabla de empleados al motor MyISAM, verifique el tiempo de ejecución. Las
dos declaraciones anteriores (17, 18) son la ejecución del motor MyISAM.
Se puede encontrar que después de modificar la declaración original, el tiempo de ejecución cambia de 0.034 s a 0,004 s, que es mucho más rápido.
para ver el plan de ejecución
Oración original:
De forma predeterminada, el motor MyISAM guarda un resultado de conteo (*), pero si hay una condición donde, la operación de MyISAM es un escaneo completo de la tabla.
Declaración modificada:
Se puede encontrar que las filas escaneadas son en realidad 1. Esto se debe a que MyISAM almacena una copia de count (*) de forma predeterminada, por lo que si count () se optimiza de esta manera en el motor MyISAM, la velocidad de consulta se puede mejorar enormemente. .