имеется таблица, например такая:
| transactions | CREATE TABLE `transactions` (
`dst` int(12) unsigned NOT NULL,
`amount` decimal(28,8) NOT NULL,
`a_amount` decimal(28,8) NOT NULL DEFAULT '0.00000000',
`n_amount` decimal(28,8) NOT NULL DEFAULT '0.00000000',
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`,`date`),
KEY `date_dst_index` (`date`,`dst`)
) ENGINE=InnoDB AUTO_INCREMENT=14227426075 DEFAULT CHARSET=utf8
делаю вот такой вот запрос, то есть хочу посчитать сумму каждого поля за сутки:
SELECT SUM(amount), SUM(a_amount), SUM(n_amount), FROM transactions WHERE date BETWEEN "2020-01-28 00:00:00" AND "2020-01-28 23:59:59";
## запрос выполняется 1.5 часа
делю запрос на два по 12 часов:
SELECT SUM(amount), SUM(a_amount), SUM(n_amount), FROM transactions WHERE date BETWEEN "2020-01-28 00:00:00" AND "2020-01-28 11:59:59";
SELECT SUM(amount), SUM(a_amount), SUM(n_amount), FROM transactions WHERE date BETWEEN "2020-01-28 12:00:00" AND "2020-01-28 23:59:59";
## 2 запроса суммарно выполняются за 4 минуты
Если сделать explain на первый вариант и на второй то вот что выдает:
-для всех суток
type: ALL, key: NULL, rows: 122365240, Extra: Using where
-для обеих половин суток
type: RANGE, key: date_dst_index, rows: 14297282, Extra: Using index condition; Using where
type: RANGE, key: date_dst_index, rows: 16312092, Extra: Using index condition; Using where