我有简单的查询,但执行时间太长。
查询:
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)。
答案 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
无论如何,这将有助于了解您正在尝试使用该查询。