MySQL-2百万级mysql一个表 怎么去掉重复的行
一个表有 7个字段,现在查询这个表中字段title值相同的行 并且删除多余的 行只留一行
请问怎么查询 效率高!
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
一个表有 7个字段,现在查询这个表中字段title值相同的行 并且删除多余的 行只留一行
请问怎么查询 效率高!
谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
先给下思路:
通过group by找出"重复标题","重复次数","最小ID"到临时表"tmptitle",然后根据"tmptitle"表中删除原表中的重复行,仅保留ID最小的重复标题行和未重复行。
具体操作如下:
1:备份表, 略.
2:建立临时表
CREATE TABLE tmptitle(
sTitle varchar(512),
num int(10),
minid int(10)
);
3: 找出重复行(此为一条SQL语句)
insert into tmptitle(sTitle,num,minid)
select sTitle,count(0) num,min(id) minid
from tTitle
group by sTitle
having num>1;
4: 删除重复行
delete from tTitle
where exists(select sTitle from tmptitle where tmptitle.sTitle=tTitle.sTitle and id<>minid);
1、新增一个char 32位的字段
2、新增的字段update为md5(title)
3、在这个字段上或者直接delete
4、删除这个字段
如果是我来做的话会可能会选择将不重复的数据导出然后在导入,例如下边两种方法:
1,导入然后改表名再导入:
mysqldump --default-character-set=utf8 -hloclahost -uroot -p db table -w "1 group title" > /tmp/xxx.sql
2,直接将不重复的数据复制到新表:
create table new_table (select * from old_table group by title)
--或者使用 insert into select ,这种方式需要先建好表
这种方式的好处就是不用删除原来的表的数据,可以先在新表中检查导入的数据是否正确
可以参考一下链接:http://blog.sina.com.cn/s/blog_4d398f210101ahsm.html