1

次の表があります。

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

ここで、t はタイムスタンプ型で、価格は float です。

テーブルは大きく、約 500K 行です。

仕事:

テーブルと各行の過去 3 日間の最低価格を表示します。

だから私は次のように書いた:

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;

問題は、クエリが完了せず、ハングしているように見えることです.... クエリを高速化する方法はありますか? それとも私は何か間違ったことをしましたか?

4

3 に答える 3

0

adddate 関数が間違っている可能性があると思います。次のように使用してみてください: ADDDATE(at, INTERVAL -3 DAY)

于 2013-04-22T05:40:49.870 に答える
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);
于 2013-04-22T05:41:59.343 に答える