-2

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

询问:

  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.dstart1WHERE子句中删除,则查询运行得非常快。

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

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

4

1 回答 1

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 

无论如何,这将有助于了解您要对该查询执行的操作。

于 2013-10-16T16:14:48.567 回答