您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在唯一约束之前清理SQL数据

在唯一约束之前清理SQL数据

我进行了几次测试。EXISTS事实证明,该变体要快得多- 正如我预期的那样,与@Tometzky发布的相反。

使用窗口函数应该比这个答案快得多:

select a
from (
  select a, rank() over (partition by b, c order by a) as rank
  from test ) as _
where rank>1;

在Postgresql 9.1.2上以适当的设置测试10.000行的平台:

CREATE TEMP TABLE test (
  a serial
 ,b int NOT NULL
 ,c int NOT NULL
);

INSERT INTO test (b,c)
SELECT (random()* 100)::int AS b, (random()* 100)::int AS c
FROM   generate_series(1, 10000);

ALTER TABLE test ADD CONSTRAINT a_pk PRIMARY KEY (a);

在第一轮和第二轮测试之间,我进行了:

ANALYZE test;

当我最终应用DELETE时,删除了3368个重复项。如果您重复的次数太多或更少,性能可能会有所不同。

我与每个查询一起运行了几次,EXPLAIN ANALYZE并取得了最佳结果。通常,最佳与第一或最差没有什么不同。 裸露SELECT(不带DELETE显示相似的结果。

SQLServer 2022/1/1 18:52:58 有353人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶