如何解决哪种方法在sql中删除重复行更快?
我需要在具有超过400万条记录的表中查找和删除重复的行。从速度的角度来看,我想知道哪种方法是最好的。我读了这篇文章,给出了几种解决方案,包括使用GROUP BY,PARTITION BY。但是,没有关于哪一个更快,最高效的解释。
我的表有23列(不同的数据类型),没有主键,也没有外键,但是我想知道通常是否有更好的方法。
解决方法
不为您的表提供主键是一个普遍的坏主意。这是删除重复项的一种方法,每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 举报,一经查实,本站将立刻删除。