Firebird 删除非常慢
Firebird delete very slow
我做这个简单的交易:
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 行
但完成删除大约需要 2 1/2 小时。我的查询不好吗?我该如何改进它?
或者我怎样才能提高交易速度?
- ominve01.cve_obs 是 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)
或执行块(您需要更正变量类型)
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
我做这个简单的交易:
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 行
但完成删除大约需要 2 1/2 小时。我的查询不好吗?我该如何改进它?
或者我怎样才能提高交易速度?
- ominve01.cve_obs 是 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)
或执行块(您需要更正变量类型)
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