基于指定长度唯一索引的Title列去重误判疑问及300万+条记录MySQL数据表精准去重方案咨询
你的判断完全正确!
当你给Title列创建长度为256的前缀主键时,InnoDB只会比对每个Title值的前256个字符来判定唯一性。这就导致了一个实际问题:只要两条记录的Title前256字符完全一致,哪怕后面的内容完全不同,INSERT IGNORE都会把它们判定为重复数据,只保留第一条,剩下的直接被忽略——也就是你担心的“误删”情况确实会发生。
针对300万+条记录的精准去重方案
因为数据量很大,操作时得兼顾准确性和性能,我给你整理了一套稳妥的步骤:
第一步:先做全量备份(重中之重!)
不管做什么数据操作,先备份永远是第一位的,避免操作失误导致数据丢失:
-- 创建备份表结构 CREATE TABLE RU_sg1lib_MASTER_backup LIKE RU_sg1lib_MASTER; -- 同步所有数据到备份表 INSERT INTO RU_sg1lib_MASTER_backup SELECT * FROM RU_sg1lib_MASTER;
第二步:恢复原表的主键结构
先把之前错误设置的Title前缀主键去掉,恢复原来的ID自增主键:
-- 删除前缀主键 ALTER TABLE RU_sg1lib_MASTER DROP PRIMARY KEY; -- 重新添加ID的自增主键(和原表结构一致) ALTER TABLE RU_sg1lib_MASTER ADD PRIMARY KEY (ID);
第三步:标记需要保留的唯一记录
我们需要找出完整Title完全相同的重复组,然后每组只保留一条(比如保留ID最小的那条,也就是最早插入的记录):
如果你用的是MySQL 8.0+(支持窗口函数):
-- 创建临时表存储需要保留的记录ID CREATE TABLE temp_keep_records AS SELECT ID FROM ( SELECT ID, -- 按Title分组,给每组记录编号,ID最小的编号为1 ROW_NUMBER() OVER (PARTITION BY Title ORDER BY ID ASC) AS rn FROM RU_sg1lib_MASTER ) t WHERE rn = 1;
如果是MySQL 5.x版本(不支持窗口函数):
用分组取最小ID的方式:
CREATE TABLE temp_keep_records AS SELECT MIN(ID) AS ID FROM RU_sg1lib_MASTER GROUP BY Title;
第四步:生成去重后的新表并替换原表
直接用DELETE删除300万+数据里的重复项会非常慢,还容易锁表,建议用“创建新表+导入唯一数据+替换原表”的方式:
-- 创建和原表结构一致的新表 CREATE TABLE RU_sg1lib_MASTER_deduplicated LIKE RU_sg1lib_MASTER; -- 把需要保留的唯一数据导入新表 INSERT INTO RU_sg1lib_MASTER_deduplicated SELECT m.* FROM RU_sg1lib_MASTER m JOIN temp_keep_records k ON m.ID = k.ID; -- 替换原表(执行前请暂停所有写入操作,避免数据不一致) RENAME TABLE RU_sg1lib_MASTER TO RU_sg1lib_MASTER_old, RU_sg1lib_MASTER_deduplicated TO RU_sg1lib_MASTER;
替换完成后,你可以检查RU_sg1lib_MASTER_old确认重复数据是否正确删除,没问题的话再删除这个旧表即可。
第五步:添加防重复的索引(可选但推荐)
如果之后要避免再出现Title重复的情况,可以给Title添加全列唯一索引:
ALTER TABLE RU_sg1lib_MASTER ADD UNIQUE INDEX idx_unique_title (Title);
要是担心长字符串索引占用空间太大,也可以用哈希值替代:
-- 新增一个存储Title哈希值的计算列 ALTER TABLE RU_sg1lib_MASTER ADD COLUMN Title_hash CHAR(32) AS (MD5(Title)) STORED; -- 给哈希列加唯一索引 ALTER TABLE RU_sg1lib_MASTER ADD UNIQUE INDEX idx_unique_title_hash (Title_hash);
哈希索引占用空间小,而且MD5的碰撞概率极低,完全可以满足唯一性校验的需求。
内容的提问来源于stack exchange,提问作者forgodsakehold
相关产品推荐
相关产品推荐

