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

在大表中检查完整的重复行

在大表中检查完整的重复行

要了解是否 完整存在重复(在所有列相同),这可能是最快的方法

SELECT EXISTS (
    SELECT 1
    FROM   tbl t
    NATURAL JOIN tbl t1 
    WHERE  t.ctid <> t1.ctid
    )

NATURAL JOIN这是一种非常方便的简写方式,因为(在此引用手册):

NATURALUSING表示两个表中具有相同名称的所有列的列表的简写。

可能最快,因为一旦发现第一个重复项,Postgres就会停止搜索。由于您很可能没有索引覆盖整个行并且表很大,因此可以节省 大量 时间。

是知道 的 永远不会 认为等同于另一个NULL。如果您拥有NULL价值观并认为它们是相同的,那么您就必须做更多的事情。

ctid是一个系统列,可以(用作)即席主键,但从长远来看,它不能替代实际的用户定义的主键。

过时的版本8.1似乎没有<>为定义运算符ctid。尝试投射到text

SELECT EXISTS (
    SELECT 1
    FROM   tbl t
    NATURAL JOIN tbl t1 
    WHERE  t.ctid::text <> t1.ctid::text
    )
其他 2022/1/1 18:44:43 有521人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

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

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

请先登录

推荐问题


联系我
置顶