MYSQL中一个表有8000W(8千万级)的数据,打算对一个URL字段去重,有什么快的方法,高手进!

tgc99 2013-08-30 03:19:33
MYSQL中一个表有8000W(8千万级)的数据,打算对一个URL字段去重,要求保留重复数据中的最大ID的一条。
...全文
442 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码誊写工 2013-09-02
  • 打赏
  • 举报
回复
在应用程序中对该表自制两个以上hash索引(不同hash算法)列,用两个64位整数,如果任意两行的这两个列的值都相同,基本就说明是重复的,对于等值比较hash的优势非常大。
ACMAIN_CHM 2013-08-30
  • 打赏
  • 举报
回复
快的方法还是导出数据,然后在EXCEL或者其它工具中直接去重,然后再导入。
yumenfeiyu945 2013-08-30
  • 打赏
  • 举报
回复
select * from ( select * from table order by id desc) t group by url 直接排序后group by,取的就是每组第一条数据,也就是id最大值的那条
rucypli 2013-08-30
  • 打赏
  • 举报
回复
引用 3 楼 tgc99 的回复:
[quote=引用 2 楼 rucypli 的回复:] [quote=引用 楼主 tgc99 的回复:] MYSQL中一个表有8000W(8千万级)的数据,打算对一个URL字段去重,要求保留重复数据中的最大ID的一条。
没什么快的方法 select出来结果集 放入一新表 删掉旧表 然后rename select * from tb A where not extsts (select 1 from tb where A.url=url and A.id<id);[/quote] URL字段当时忘记作索引了,这个select 应该会非常慢吧??主要还想统计出哪些是重复的[/quote] 单纯统计哪些重复的url可以 select url from tb group by url having count(*)>1 当然要加所以才能快
rucypli 2013-08-30
  • 打赏
  • 举报
回复
对的 没有索引这样的查询会非常慢
tgc99 2013-08-30
  • 打赏
  • 举报
回复
引用 2 楼 rucypli 的回复:
[quote=引用 楼主 tgc99 的回复:] MYSQL中一个表有8000W(8千万级)的数据,打算对一个URL字段去重,要求保留重复数据中的最大ID的一条。
没什么快的方法 select出来结果集 放入一新表 删掉旧表 然后rename select * from tb A where not extsts (select 1 from tb where A.url=url and A.id<id);[/quote] URL字段当时忘记作索引了,这个select 应该会非常慢吧??主要还想统计出哪些是重复的
rucypli 2013-08-30
  • 打赏
  • 举报
回复
引用 楼主 tgc99 的回复:
MYSQL中一个表有8000W(8千万级)的数据,打算对一个URL字段去重,要求保留重复数据中的最大ID的一条。
没什么快的方法 select出来结果集 放入一新表 删掉旧表 然后rename select * from tb A where not extsts (select 1 from tb where A.url=url and A.id<id);
超超狗狗 2013-08-30
  • 打赏
  • 举报
回复
select xx,xxx,max(id) from aaa group by url

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧