MySQL - 如何加速SELECT SUM

时间:2016-12-03 10:33:52

标签: mysql sql performance optimization query-performance

我有一个像这样的MySQL表:

CREATE TABLE `goods_flow` (
 `cycle_id` int(11) NOT NULL,
 `subject_id` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
 `origin_id` int(11) NOT NULL,
 `flow_value` int(11) NOT NULL,
 PRIMARY KEY (`cycle_id`,`origin_id`,`subject_id`),
 KEY `fk_goods_flow_subjects` (`subject_id`),
 KEY `fk_goods_flow_origins` (`origin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

并且应用程序经常使用此查询:

SELECT SUM(flow_value) AS 'amount_of_goods' FROM goods_flow WHERE subject_id = 'xyz';

需要很长时间。

我怎样才能加快查询执行速度? 谢谢

2 个答案:

答案 0 :(得分:3)

这是您的查询:

SELECT SUM(flow_value) AS amount_of_goods
FROM goods_flow
WHERE subject_id = 'xyz';

您可以使用复合索引加速此查询。最佳指数是goods_flog(subject_id, flow_value)。此索引是查询的覆盖索引,这意味着查询所需的所有数据都在索引中,因此不需要访问原始数据页。

答案 1 :(得分:0)

PRIMARY KEY中3列的顺序是否有某些原因?如果没有,那么将它们洗牌以便subject_id成为第一个。 (并辅以二级钥匙。)

如果需要500毫秒来读取57行,那么它听起来像非常冷缓存。如果你连续两次运行它会发生什么?

innodb_buffer_pool_size的价值是多少?它是相关的缓存。你有多少RAM?