Firebird删除速度非常慢 [英] Firebird delete very slow

查看:17
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆