我有一个如下图所示的表,它有大约100,000条记录。
CREATE TABLE IF NOT EXISTS `order_items` (
`order_item_id` int(1) unsigned NOT NULL AUTO_INCREMENT,
`item_id` int(1) unsigned DEFAULT '0',
`final_amt` double NOT NULL DEFAULT '0',
PRIMARY KEY (`order_item_id`),
KEY `item_id` (`item_id`),
KEY `final_amt` (`final_amt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
(请注意,还有一些其他字段和索引。)
当我运行以下查询时,大约需要10到20秒。
SELECT item_id, SUM( final_amt) AS tot_final_amt
FROM `order_items`
GROUP BY item_id;
(大约有350个不同的item_id值。)
如何让我的结果更快?
答案 0 :(得分:0)
您不使用过滤条件(WHERE),因此必须扫描整个表。如果您不能使用WHERE,则需要创建一个新表,以便为每个EOF
存储SUM()。每次更改scanf()
时,您都需要更新此新表(例如,使用TRIGGER,如rkosegi所建议的那样)。这是多余的,但我认为这是加速查询所必需的。