Sugerencia de optimización de Mysql para mesa grande
quiero optimizar esta consulta,
select location_id, dept_id,
round(sum(sales),0), sum(qty),
count(distinct tran_id),
now()
from tran_sales
where tran_date <= '2016-12-24'
group by location_id, dept_id;
Actualmente, esta consulta se ejecuta durante un promedio aproximado de 98 segundos (la consulta tomó 97.4096 segundos) en Windows 10, sistema operativo de 64 bits, 16 GB de RAM.
Este es el detalle de la tabla para su referencia.
CREATE TABLE tran_sales (
tran_date date NOT NULL,
location_id int(11) NOT NULL,
dept_id int(11) NOT NULL,
item_id varchar(25) NOT NULL,
tran_id int(11) NOT NULL,
sales float DEFAULT NULL,
qty int(11) DEFAULT NULL,
update_datetime datetime NOT NULL,
PRIMARY KEY (tran_date,location_id,dept_id,item_id,tran_id),
KEY tran_date (tran_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
el recuento de registros en la tabla tran_sales:13,5 millones.
Nota: Incluso lo intenté sin y con este índiceKEY tran_date (tran_date)
. y el tiempo promedio que toma es de 98 segundos con y sinKEY tran_date (tran_date)
sugiera cómo acelerar los resultados cambiando la consulta o cambiando algunas configuraciones predeterminadas de my.ini si eso ayuda. Gracias.
Actualizar la fecha mínima en la tabla es: 2016-07-01, y la fecha máxima en la tabla es: 2017-07-25