Firebird删除速度非常慢 [英] Firebird delete very slow
本文介绍了Firebird删除速度非常慢的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在进行这个简单的交易:
DELETE FROM ominve01
WHERE CVE_OBS IN (SELECT CVE_OBS
FROM minve01 M
WHERE M.FECHA_DOCU < '31.12.2010'
OR FECHA_DOCU > '31.12.2015')
- minve01有189K行
- ominve01有86k行
但需要大约两个半小时才能完成删除。我的查询有问题吗?我如何改进它?
或者如何提高交易速度?
- ominve01.cve_obs为主键
- minve01.cve_obs不是主键
推荐答案
DELETE FROM ominve01 N
WHERE
exists(SELECT * FROM minve01 M
WHERE M.FECHA_DOCU < '31.12.2010'
OR FECHA_DOCU > '31.12.2015' and
N.CVE_OBS=M.CVE_OBS)
或EXECUTE BLOCK(需要更正变量类型)
execute block
as
declare variable v integer;
begin
for SELECT M.CVE_OBS
FROM minve01 M
WHERE M.FECHA_DOCU < '31.12.2010'
OR FECHA_DOCU > '31.12.2015'
into :v do delete from ominve01 WHERE CVE_OBS=:v;
end
这篇关于Firebird删除速度非常慢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文