微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

哪种方法在sql中删除重复行更快?

如何解决哪种方法在sql中删除重复行更快?

我需要在具有超过400万条记录的表中查找和删除重复的行。从速度的角度来看,我想知道哪种方法是最好的。我读了这篇文章,给出了几种解决方案,包括使用GROUP BY,PARTITION BY。但是,没有关于哪一个更快,最高效的解释。

我的表有23列(不同的数据类型),没有主键,也没有外键,但是我想知道通常是否有更好的方法

可以在here上看到该文章

解决方法

不为您的表提供主键是一个普遍的坏主意。这是删除重复项的一种方法,每23列保留的记录是任意的:

WITH cte AS (
    SELECT *,ROW_NUMBER() OVER (PARTITION BY col1,col2,col3,...,col22,col23
                                 ORDER BY (SELECT NULL)) rn
    FROM yourTable
)

DELETE
FROM cte
WHERE rn > 1;
,

不知道您的表结构不可能为您提供准确的答案。 但是,为什么不尝试一些方法并用DELETE代替SELECT进行基准测试呢?

我喜欢使用类似这样的简单内容,但是我的表仅包含约50000行,因此我没有任何性能问题

select * from tblTruckCost 
--DELETE FROM tblTruckCost
WHERE tblTruckCost.TruckCostID NOT IN
(
  SELECT MIN(c.TruckCostID)
  FROM   tblTruckCost c
  GROUP BY c.DossierNumber,c.SequenceNumber,c.InvoiceNumber
)

group by用于获得双打

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。