sql >> Base de Datos >  >> RDS >> Mysql

optimizar la consulta de conteo de mysql

Si mysql tiene que contar 11 millones de filas, realmente no hay muchas formas de acelerar un recuento simple. Al menos no para llevarlo a una velocidad inferior a 1 segundo. Deberías replantearte cómo haces tu conteo. Algunas ideas:

  1. Agregue un campo de incremento automático a la tabla. Parece que no eliminaría de la tabla, por lo que puede usar matemáticas simples para encontrar el recuento de registros. Seleccione el número de incremento automático mínimo para la fecha anterior inicial y el máximo para la última fecha y reste uno del otro para obtener el recuento de registros. Por ejemplo:

    SELECT min(incr_id) min_id FROM record_updates WHERE date_updated BETWEEN '2009-10-11 15:33:22' AND '2009-10-12 23:59:59';
    SELECT max(incr_id) max_id FROM record_updates WHERE date_updated > DATE_SUB(NOW(), INTERVAL 2 DAY);`
    
  2. Cree otra tabla que resuma el recuento de registros de cada día. Luego puede consultar esa tabla para los registros totales. Solo habría 365 registros para cada año. Si necesita llegar a tiempos más detallados, consulte la tabla de resumen para días completos y la tabla actual solo para el recuento de registros para los días de inicio y finalización. Luego súmalos todos juntos.

Si los datos no están cambiando, lo cual no parece que sea así, entonces las tablas de resumen serán fáciles de mantener y actualizar. Ellos acelerarán significativamente las cosas.