哪种方式可以更快地删除 sql 中的重复行?

Which way is faster to delete duplicate rows in sql?

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

我的 table 有 23 列(不同的数据类型),没有 Primary KEY 也没有 FOREIGN KEYS 但我想知道通常是否有更好的方法来做到这一点。

文章可见here.

不了解您的 table 结构,因此无法给您准确的答案。 但是,为什么不尝试一些方法并将 DELETE 替换为 SELECT 来对它们进行基准测试呢?

我喜欢使用像这样简单的东西,但是我的 table 只包含大约 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用于获取双打

table 没有主键通常是个坏主意。这是删除重复项的一种方法,每 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;