@davidb. , , Это зависит от характера данных. Только ты можешь ответить на это.
у оптимизировать этот запрос,
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;
в настоящее время этот запрос выполняется в среднем около 98 секунд (запрос занял 97,4096 секунд) в Windows 10, 64-разрядной ОС, 16 ГБ ОЗУ.
это таблица деталей для вашей справки.
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;
количество записей в таблице tran_sales:13,5 миллионов.
Примечание: Даже я пытался без и с этим индексомKEY tran_date (tran_date)
, и среднее время занимает 98 секунд с и безKEY tran_date (tran_date)
Пожалуйста, предложите, как ускорить результаты, изменив запрос или изменив некоторые настройки по умолчанию my.ini, если это поможет. Благодарю.
Обновить минимальная дата в таблице: 2016-07-01, а максимальная дата в таблице: 2017-07-25