"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo acelerar una consulta lenta \"SELECT COUNT(*)...\" con una cláusula WHERE en MySQL?

¿Cómo puedo acelerar una consulta lenta \"SELECT COUNT(*)...\" con una cláusula WHERE en MySQL?

Publicado el 2024-11-12
Navegar:676

How Can I Speed Up a Slow \

Optimizando "SELECT COUNT(*)..." con la cláusula Where

El problema que nos ocupa se refiere a un "SELECT COUNT" significativamente lento (*)" consulta en MySQL, incluso cuando se aplica una cláusula "WHERE". Para abordar este desafío, es fundamental comprender el mecanismo de almacenamiento de MySQL.

Claves primarias agrupadas

InnoDB, el motor de almacenamiento utilizado en este caso, utiliza claves primarias agrupadas. Esto significa que la clave principal se almacena junto a la fila de datos en las mismas páginas de datos, en lugar de en páginas de índice separadas. En consecuencia, realizar un escaneo de rango en una clave primaria agrupada requiere escanear todas las filas, incluidos los valores de columna potencialmente amplios. La tabla en cuestión contiene una columna de TEXTO, lo que agrava aún más el problema de rendimiento.

Estrategias de optimización

Para optimizar esta consulta, considere las siguientes estrategias:

  1. Optimizar tabla: La ejecución de "OPTIMIZAR TABLA" garantiza que las páginas de datos estén físicamente ordenadas en orden. Esta optimización puede mejorar potencialmente el rendimiento de los escaneos de rango en claves primarias agrupadas.
  2. Cree un índice adicional: Considere la posibilidad de crear un índice no primario únicamente en la columna "change_event_id". Esto creará una copia de esa columna en las páginas de índice, cuyo escaneo es significativamente más rápido en comparación con la clave principal agrupada. Verifique el plan de explicación después de crear el índice para confirmar su utilización.

Sugerencia adicional

Para mejorar aún más el rendimiento, considere modificar la columna "change_event_id" para será "BIGINT UNSIGNED" si aumenta desde cero. Este cambio puede dar como resultado requisitos de almacenamiento reducidos y un rendimiento mejorado.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3