我有一个像这样的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';
需要很长时间。
我怎样才能加快查询执行速度? 谢谢
答案 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?