繁体   English   中英

postgreSQL 查询似乎在无限循环中运行

[英]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.

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