MySQL去重全攻略:高效方法与实用技巧解析
在MySQL中,去重操作主要通过DISTINCT关键字GROUP BY子句窗口函数来实现,具体方法需根据场景灵活选择。

使用DISTINCT关键字
这是最直接的去重方式,适用于单列或多列组合的去重查询。

mysql如何去重复,高效去除MySQL重复数据

SELECT DISTINCT column_name FROM table_name;

若需多列去重,只需列出所有列名:

SELECT DISTINCT column1, column2 FROM table_name;

利用GROUP BY聚合
通过GROUP BY对指定列分组,可同时实现去重与数据聚合(如计数、求和),示例:

SELECT column_name, COUNT(*) 
FROM table_name 
GROUP BY column_name;

窗口函数ROW_NUMBER()
适用于复杂场景,如保留重复数据中的特定行(如最新记录),以下示例按时间戳保留最新数据:

WITH ranked_data AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY duplicate_column ORDER BY timestamp DESC) AS rn
    FROM table_name
)
SELECT * FROM ranked_data WHERE rn = 1;

创建临时表或唯一索引
对于数据表本身的去重,可借助临时表复制唯一数据,或添加UNIQUE INDEX防止未来重复:

-- 方法1:临时表替换
CREATE TABLE new_table AS SELECT DISTINCT * FROM old_table;
DROP TABLE old_table;
RENAME TABLE new_table TO old_table;
-- 方法2:添加唯一索引
ALTER TABLE table_name ADD UNIQUE INDEX idx_unique (column1, column2);

使用DELETE JOIN删除重复行
若需直接删除表中重复行,可通过自关联操作:

DELETE t1 FROM table_name t1
INNER JOIN table_name t2 
WHERE t1.id < t2.id AND t1.duplicate_column = t2.duplicate_column;

注意事项

  • 去重前建议备份数据,避免误操作丢失信息。
  • 大数据表去重时,优先考虑索引优化或分批次处理,以提升效率。
  • 结合EXPLAIN分析查询性能,确保方法适用于实际数据规模。

通过以上方法,可高效应对MySQL中的各类去重需求,平衡数据准确性与系统性能。

未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网

原文地址:https://www.html4.cn/8624.html发布于:2026-08-03