更新查询的执行时间太长

时间:2019-05-22 09:07:22

标签: sql firebird firebird2.5

我正在尝试使用查询更新表,该查询在Postgresql和Oracle上执行的时间约为5秒,但在Firebird 2.5上花费的时间太长。

UPDATE GoodsCatUnit SET isDisplay=1 
WHERE Id In (SELECT Min(gcu.Id) FROM GoodsCatUnit gcu GROUP BY gcu.GoodsCat_Id);

GoodsCatUnit〜34k行中,更新前200行需要15秒。

1 个答案:

答案 0 :(得分:1)

尝试使用相关子查询编写此代码并定义一个索引。

查询为:

UPDATE GoodsCatUnit gcu
    SET isDisplay = 1 
    WHERE gcu.id = (SELECT MIN(gcu2.id) 
                    FROM GoodsCatUnit gcu2
                    WHERE gcu2.GoodsCat_Id = gcu.GoodsCat_Id
                   ) AND
          gcu.isDisplay <> 1;

索引位于GoodsCatUnit(GoodsCat_Id, id)上。