0

我正在尝试使用 SUM 获得两个日期之间的结果,但是在循环中执行多个查询需要很长时间。以下是我的查询。

数据库表包含超过 1.5L 的记录,并且这个计数会增加。并且还在循环中执行多个查询。

以下是我的查询:

SELECT TIME_FORMAT( SEC_TO_TIME( SUM( TIME_TO_SEC( run_hours ) ) ) , '%H:%i:%s' ) AS total_time
FROM excel_info
WHERE indus_id = 'IN-1086331' AND (date_time BETWEEN '2008-11-27' AND '2013-05-04')

数据库表结构:

CREATE TABLE IF NOT EXISTS `excel_info` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `indus_id` varchar(20) NOT NULL,
   `district` varchar(50) NOT NULL,
   `date_time` date NOT NULL,
   `run_hours` varchar(100) NOT NULL,
   `flag` varchar(100) NOT NULL,
   PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1844417 ;

提前致谢。

4

1 回答 1

1

添加包含您要过滤的列的索引:

CREATE INDEX ix_indus_dt ON `excel_info` (`indus_id`, `date_time`);

此外,调用TIME_TO_SEC每个匹配的行会很昂贵。您可以改为存储run_hours为整数。

于 2013-06-10T16:36:12.087 回答