1 mysql
我认为这是一个非常基本的查询,但它需要很长时间才能运行.
我的MySQL服务器的细节:
我正在运行查询的表有33列:时间戳,32列有井名(例如LEW91_4).目前表中有大约250万条记录.井列的数据类型为float.索引是:
查询:
SELECT
DATE_FORMAT(t_stamp, '%m/%d/%Y %h:00 %p') as 'Date',
AVG(LEW91_1R97) as 'LEW91_1R97',
AVG(LEW91_2R97) as 'LEW91_2R97',
AVG(LEW91_3R97) as 'LEW91_3R97',
AVG(LEW91_4) as 'LEW91_4',
AVG(LEW97_1) as 'LEW97_1',
AVG(LEW97_3) as 'LEW97_3',
AVG(LEW97_4) as 'LEW97_4',
AVG(LEW97_6) as 'LEW97_6',
AVG(LEW97_7) as 'LEW97_7',
AVG(LEW97_8) as 'LEW97_8',
AVG(LEW97_12) as 'LEW97_12'
FROM C1_Flows
WHERE DAY(t_stamp) = 28
AND MONTH(t_stamp) = 09
AND YEAR(t_stamp) = 2015
GROUP BY DAY(t_stamp), HOUR(t_stamp)
Run Code Online (Sandbox Code Playgroud)
当我从MySQL Workbench运行它时,查询当前大约需要11秒.当它从我用于开发HMI的基于Java的界面中运行时,它会因特定错误"读取超时"而超时.
我在类似的服务器上运行了更复杂的查询(即连接,联合,if语句等),并且运行速度比这个快.有没有办法可以加快速度,或者我错过了一些明显的东西?
不使用
WHERE DAY(t_stamp) = 28
AND MONTH(t_stamp) = 09
AND YEAR(t_stamp) = 2015
Run Code Online (Sandbox Code Playgroud)
改用
WHERE t_stamp >= '2015-09-28' AND t_stamp < '2015-09-29'
Run Code Online (Sandbox Code Playgroud)
要么
WHERE t_stamp >= '2015-09-28' AND t_stamp < ADDDATE('2015-09-28', INTERVAL 1 DAY)
Run Code Online (Sandbox Code Playgroud)
并且有一个t_stamp的索引.按照您编写的方式,每条记录都需要对where子句进行计算,并且不能使用索引.
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |