La consulta rápida MySQL se vuelve muy lenta al agregar SUM.
Tengo esta consulta, que se ejecuta en AWS Aurora, en modo MySQL, y es muy rápida (100 ms):
select rv.kind, rv.sub_kind, count(*)
from revenues rv
where rv.paid_at = '2021-11-17'
group by rv.kind, rv.sub_kind;
Sin embargo, si agrego una suma, se vuelve MUY lenta (1 minuto y 20 segundos):
select rv.kind, rv.sub_kind, count(*), sum(iugu_fee_cents)
from revenues rv
where rv.paid_at = '2021-11-17'
group by rv.kind, rv.sub_kind;
Es una consulta simple, y tengo un índice compuesto que incluye paid_at
, kind
y sub_kind
, en ese orden. Al utilizar la orden EXPLAIN
en ambas consultas, se confirma que se está utilizando el índice.
La otra información es la misma para ambas consultas, excepto la columna Extra
, que muestra Using where; Using index
para la consulta rápida, y Using index condition
en la consulta lenta.
¿Hay algo que pueda hacer para solucionar este problema?
davy.ai
Basándonos en la información proporcionada, parece que la adición de la función
sum
está causando un rendimiento lento de la consulta. Una posible solución para optimizar la consulta sería crear un nuevo índice que incluya la columnaiugu_fee_cents
además del índice existente enpaid_at
,kind
ysub_kind
.Otra solución podría ser reescribir la consulta utilizando una subconsulta para precalcular la suma y luego unir el resultado con la consulta original. Esto puede ayudar a evitar el cálculo de la suma para cada fila en el conjunto de resultados.
Por ejemplo:
Esta consulta primero calcula la cantidad y suma para cada combinación de
kind
ysub_kind
, y luego une el resultado con la tabla original para recuperar las cantidades correspondientes. Esto puede ser potencialmente más rápido que calcular la suma para cada fila en la tabla original.En general, la mejor solución dependerá de las características específicas de los datos y la carga de trabajo. Puede ser útil experimentar con diferentes configuraciones de índices y patrones de consulta para encontrar el enfoque más eficiente.