Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date Mysql总和和日期之间花费的时间很长_Date_Time Format - Fatal编程技术网

Date Mysql总和和日期之间花费的时间很长

Date Mysql总和和日期之间花费的时间很长,date,time-format,Date,Time Format,我试图用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

我试图用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 ;

提前感谢。

添加一个索引,其中包括您正在筛选的列:

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

此外,在每个匹配的行上调用
TIME\u TO_SEC
,代价会很高。您可以将
run\u hours
存储为整数。

@Barmar,我们还有其他选项来减少更多时间吗?如果是的话,你能不能也请那些。。谢谢你,我想不起来了。您可以为每一年创建单独的表,但您的查询跨越多个年份,因此情况会更糟。添加了将
运行小时数
存储为整数而不是时间字符串的建议。