简体   繁体   English

Firebird删除非常慢

[英]Firebird delete very slow

Im making this simple transaction: 林使这个简单的交易:

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 has 189k rows minve01有18.9万行
  • ominve01 has 86k rows ominve01有86k行

But it takes about 2 1/2 hours to complete deleting. 但是完成删除大约需要2 1/2小时。 Is my query bad? 我的查询不好吗? how can I improve it? 我该如何改善?

or how can i increase the transaction speed? 或如何提高交易速度?

  • ominve01.cve_obs is pk ominve01.cve_obs是pk
  • minve01.cve_obs is not pk minve01.cve_obs不是pk
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)

or execute block (you need to correct type of variable) 或执行块(您需要更正变量的类型)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM