我正在尝试使用查询更新表,该查询在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秒。
答案 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)
上。