Im使用下面的查詢來計算每個公司排名前5的費用並對它們進行排序。目前該表有大約300萬行,需要大約8秒才能正確執行。我正在尋找一種方法來加速這一點。如何加速此SUM查詢?
SELECT
SUM(cost) as sumw,
company FROM cost
WHERE
datetime BETWEEN '2016-10-01' AND '2016-12-01'
GROUP BY company
ORDER BY sumw desc
LIMIT 5;
datetime有一個索引。
說明:
1 SIMPLE cost NULL ALL datetime NULL NULL NULL 3204715 50.00 Using where; Using temporary; Using filesort
CREATE
CREATE TABLE `cost` (
`id` bigint(8) unsigned NOT NULL AUTO_INCREMENT,
`company` varchar(45) DEFAULT NULL,
`cost` bigint(8) unsigned DEFAULT NULL,
`datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `datetime` (`datetime`)
) ENGINE=InnoDB AUTO_INCREMENT=3335830 DEFAULT CHARSET=utf8;
添加硬件;或在查詢之前每天/每小時生成總計。 SQL看起來像它一樣高效。也許會把字符串轉換成日期,所以它不必隱含地做到這一點,但我無法想象這會給你帶來多大的收益。在MySQL之外,我可能會提出一個帶週期性刷新的物化視圖,但MySQL沒有。 – xQbert
習慣上要求SQL性能有助於顯示涉及的表定義,包括索引。顯示'EXPLAIN'的輸出也是一個好主意。 –
補充信息@ O.Jones – Ray