【发布时间】:2011-11-23 00:59:32
【问题描述】:
我正在尝试查找一系列特定日期的最近进入时间。当我跑步时
select max(ts) as maxts from factorprice where ts <= '2011-1-5'
它很快就会返回。
EXPLAIN 给出了 select_type SIMPLE 和“选择优化掉的表”。
但是当我运行时
select (select max(ts) from factorprice where ts <= dates.dt) as maxts, dates.dt
from
trends.dates where dates.dt in ('2011-1-6');
返回需要很长时间(~10 秒)。
解释给出:
- select_type=PRIMARY table=dates rows=506 Extra=Using where
- select_type=依赖子查询表=factorprice type=index possible_keys=PRIMARY key=PRIMARY keylen=8 行=26599224 Extra=正在使用 在哪里;使用索引
此查询也需要很长时间(10 秒)
select dt, max(ts) as maxts from factorprice as f inner join trends.dates as d
where ts <= dt and dt in ('2011-1-6')
group by dt;
解释给出:
- select_type=SIMPLE table=d type=ALL rows =509 Extra=Using where
- select_type=SIMPLE table=f type=range possible_keys=PRIMARY key=PRIMARY keylen=8 rows=26599224 Extra=Using 在哪里;使用索引
我想在许多不同的日期执行相同的操作。有没有办法可以有效地做到这一点?
【问题讨论】:
-
在查询前添加
EXPLAIN,看看瓶颈出现在哪里。然后发回,以便您收到更好的答案。 -
我猜它正在为
trends上的每一行运行嵌套查询。加入版本可能有类似的问题,因为加入没有 ON 条件。 -
dates.dt 上有索引吗?
-
bfavaretto:当我向“in (...)”添加第二个日期时,第二个查询所需的时间是以前的两倍。
-
Gruikya:没有,所以我加了一个,但没有任何改变。
标签: mysql performance