我的子查询占用了太多时间

时间:2013-10-16 16:05:13

标签: mysql sql

我有简单的查询,但执行时间太长。

查询:

  SELECT a.primarykey, 
         a.SID, 
         a.VID, 
         a.topic, 
         a.dstart, 
         a.dstop, 
         a.vresult,
         a.dstart1,
         a.dstart2,
         ( SELECT MIN(d.vresult)
                 FROM _temp._pb_1_1_4_1 d  
                 WHERE d.dstart1 > a.dstart1                   

         ) as _DOP0 
    FROM _temp._pb_1_1_4_1 a 

dstart1 已编入索引

dstart1日期类型列。

请帮我优化以上查询。

如果我从d.dstart1 > a.dstart1子句中删除 WHERE ,则查询运行得非常快。

当我解释查询时,它给出了“为每条记录检查的范围(索引图:0x1)”

我想为每一行实现vresult的最小值。 对于每一行,首先过滤所有对同一个表具有更大dstart1值的记录,然后找到该行的min(vresult)。

1 个答案:

答案 0 :(得分:0)

在不知道你要做什么的情况下......这个查询应该返回相同的结果,并且已经删除了不必要的计算:

select a.primarykey, a.SID, a.VID, a.topic, a.dstart, a.dstop,
       a.vresult, a.dstart1, a.dstart2, (
           select MIN(d.vresult) 
           from _temp._pb_1_1_4_1 d  
           where  d.dstart1 > a.dstart1) _DOP0 
from _temp._pb_1_1_4_1 a 

无论如何,这将有助于了解您正在尝试使用该查询。