MySQL去重全攻略:高效方法与实用技巧解析
在MySQL中,去重操作主要通过DISTINCT关键字、GROUP BY子句或窗口函数来实现,具体方法需根据场景灵活选择。
使用DISTINCT关键字
这是最直接的去重方式,适用于单列或多列组合的去重查询。

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





