加快我的mysql语句

时间:2013-04-22 05:33:45

标签: mysql performance select virtual

我有下表:

+---------------------+-------+
| t                   | price |
+---------------------+-------+
| 2013-04-22 13:23:51 |  9.42 |
+---------------------+-------+

其中t是类型时间戳,价格是浮动。

表很大,大约500K行。

任务:

我将显示每行的表格和过去3天的MIN价格。

所以我写了以下内容:

select *,(
  select max(b.price)
  from my_table b 
  where b.t<a.t and date(b.t)>=adddate(date(a.t),-3)
) from my_table a;

问题在于它完成了我的查询并且它看起来像是挂起的....有没有办法来查询?或者我做错了什么?

3 个答案:

答案 0 :(得分:0)

我认为你的adddate函数可能不正确。尝试使用它:ADDDATE(a.t,INTERVAL -3 DAY)

答案 1 :(得分:0)

我会试试这个:

select *,(
  select max(b.price)
  from my_table b 
  where b.t between a.t - interval 3 day and a.t - interval 1 second
) from my_table a;

并确保my_table.t有一个索引:

alter table my_table add index ix_t (t);

答案 2 :(得分:0)

此查询应该可以快速运行:

SELECT *,
    (   SELECT max(b.price)
        FROM my_table b
        WHERE b.t > a.t - interval 3 day
          AND b.t < a.t
    )
FROM my_table a

但您需要确保在mytable(t)上有索引 - 我认为此字段为timestampdatetime