[英]postgreSQL query seems to be running on infinite loop
按照我之前的问题,我现在试图从我的数据库中删除重复项。 我首先运行一个子查询来识别几乎相同的记录(唯一的区别是索引列“id”)。 我的表大约有 900 万条记录,下面的代码必须在大约 1 小时 30 分后中断
DELETE FROM public."OptionsData"
WHERE id NOT IN
(
SELECT id FROM (
SELECT DISTINCT ON (asofdate, contract, strike, expiry, type, last, bid, ask, volume, iv, moneyness, underlying, underlyingprice) * FROM public."OptionsData"
) AS TempTable
);
从子查询生成结果大约需要 1 分钟,所以也许运行完整查询可能需要很长时间 (?) 或者我的代码中有什么问题吗?
NOT IN 与 DISTINCT 结合通常很慢。
使用 EXISTS 删除重复项通常更快:
DELETE FROM public."OptionsData" d1
WHERE EXISTS (select *
from public."OptionsData" d2
where d1.id > d2.id
and (d1.asofdate, d1.contract, d1.strike, d1.expiry, d1.type, d1.last, d1.bid, d1.ask, d1.volume, d1.iv, d1.moneyness, d1.underlying, d1.underlyingprice)
= (d2.asofdate, d2.contract, d2.strike, d2.expiry, d2.type, d2.last, d2.bid, d2.ask, d2.volume, d2.iv, d2.moneyness, d2.underlying, d2.underlyingprice)
)
这将保留id
具有最小值的行。 如果您想保留那些具有最高id
使用where d1.id < d2.id
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.