我试图用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 ;
先谢谢。
答案 0 :(得分:1)
添加包含您要过滤的列的索引:
CREATE INDEX ix_indus_dt ON `excel_info` (`indus_id`, `date_time`);
此外,在每个匹配的行上调用TIME_TO_SEC
将会很昂贵。您可以将run_hours
存储为整数。