通过唯一索引去重
为了防止重复数据插入,错误地为字段A、B创建了普通索引, C、D,导致2000万条记录的表中存在重复记录。问题出现了:为这些字段添加唯一索引会在不影响现有字段的情况下删除重复项吗?
更正索引并处理重复项
添加唯一索引不带 IGNORE 修饰符的 ALTER TABLE 语句将失败,因为唯一记录已存在。但是,使用 IGNORE 修饰符将删除重复项。
MySQL 版本 5.7.4 及以上版本的替代方法
对于 MySQL 版本 5.7.4 及以上版本,其中不支持 IGNORE 修饰符,建议使用不同的方法:
使用 INSERT 删除重复项的语法忽略
CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * FROM tmp_data;
DROP TABLE tmp_data;
其他注意事项
文档没有指定使用 IGNORE 修饰符后将保留哪些重复行。建议先在较小的数据集上进行测试,然后再将解决方案应用于大型表。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3