"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 optimizar el rendimiento del recuento (*) en innodb con índices y almacenamiento en caché estadístico?

¿Cómo puedo optimizar el rendimiento del recuento (*) en innodb con índices y almacenamiento en caché estadístico?

Publicado el 2025-02-09
Navegar:497

How Can I Optimize COUNT(*) Performance on InnoDB with Indices and Statistical Caching?

optimizing Count (*) Performance en innoDB con índices

cuando se trata de tablas innoDB grandes pero estrechas, ejecutando consultas de conteo (*) se pueden notar notablemente lentas. Esto se encontró en un escenario en el que una tabla que consta de ~ 9 millones de registros dio como resultado una operación de 6 segundos (*).

de acuerdo con la documentación de MySQL, lo que obliga a innodb a usar un índice para contar operaciones de conteo puede producir un rendimiento significativo de rendimiento ganancias. Esto se logra utilizando la sintaxis del índice de uso (index_name) en la consulta.

En el ejemplo dado, la siguiente consulta se empleó:

SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);

Sin embargo, a pesar de usar el índice, el rendimiento permaneció abismal. Al buscar más opciones de solución de problemas, se descubrió que MySQL 5.1.6 introdujo una solución eficiente que involucra al programador de eventos y al almacenamiento de almacenamiento estadístico.

Scheduler y almacenamiento en caché estadístico

Tabla de estadísticas, la operación de recuento (*) puede optimizarse significativamente. El proceso implica crear una tabla de estadísticas para almacenar los datos de conteo:

CREATE TABLE stats (`key` VARCHAR(50) NOT NULL PRIMARY KEY, `value` VARCHAR(100) NOT NULL);

Posteriormente, se crea un evento para actualizar regularmente la tabla de estadísticas con el recuento actual:

CREATE EVENT update_stats
ON SCHEDULE
  EVERY 5 MINUTE
DO
  INSERT INTO stats (`key`, `value`)
  VALUES ('data_count', (SELECT COUNT(id) FROM data))
  ON DUPLICATE KEY UPDATE value=VALUES(value);

Esta solución autónoma permite intervalos de actualización personalizables, asegurando la precisión y frescura del recuento almacenado. Si bien puede no ser perfecto, ofrece mejoras considerables en el rendimiento en comparación con los métodos tradicionales.

Ú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