我可以通过时间戳加快一个相当简单的选择查询吗?

时间:2015-09-30 20:55:02

标签: mysql

我认为这是一个非常基本的查询,但需要很长时间才能运行。

我的MySQL服务器的细节:

  • Ubuntu Server 14.04,64位作为VMWare Workstation虚拟机运行
  • 专用于VM的2GB RAM

运行查询的表格有33列:时间戳,32列有井名(例如LEW91_4)。目前表中有大约250万条记录。井列的数据类型为float。索引是:

  • 专栏:ndx,索引:PRIMARY
  • 列:t_stamp,索引:C1_Flowst_stampndx

查询:

    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)

当我从MySQL Workbench运行查询时,查询当前大约需要11秒。当它在我用于开发HMI的基于Java的界面中运行时,它会因特定错误超时而超时。#34;

我在类似的服务器(即连接,联合,if语句等)上运行更复杂的查询,并且它们比这个运行得更快。有没有办法可以加快速度,或者我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:5)

不要使用

com.ionic.keyboard

改为使用

WHERE DAY(t_stamp) = 28
AND MONTH(t_stamp) = 09
AND YEAR(t_stamp) = 2015

WHERE t_stamp >= '2015-09-28' AND t_stamp < '2015-09-29'

并且索引超过t_stamp。按照你写的方式,每个记录都需要对where子句进行计算,并且不能使用索引。

答案 1 :(得分:1)

使用:

WHERE t_stamp BETWEEN '2015-09-28 00:00' AND '2015-09-28 23:59:59'

匹配该日期的所有时间戳。

这将使用索引。