MYSQL中一个表有8000W(8千万级)的数据,打算对一个URL字段去重,要求保留重复数据中的最大ID的一条。

解决方案 »

  1.   

    select xx,xxx,max(id)
    from aaa
    group by url
      

  2.   

    没什么快的方法  select出来结果集 放入一新表  删掉旧表  然后renameselect * from tb A
    where not extsts (select 1 from tb where A.url=url and A.id<id);
      

  3.   

    没什么快的方法  select出来结果集 放入一新表  删掉旧表  然后renameselect * from tb A
    where not extsts (select 1 from tb where A.url=url and A.id<id);URL字段当时忘记作索引了,这个select 应该会非常慢吧??主要还想统计出哪些是重复的
      

  4.   

    没什么快的方法  select出来结果集 放入一新表  删掉旧表  然后renameselect * from tb A
    where not extsts (select 1 from tb where A.url=url and A.id<id);URL字段当时忘记作索引了,这个select 应该会非常慢吧??主要还想统计出哪些是重复的
    单纯统计哪些重复的url可以
    select url from tb group by url having count(*)>1
    当然要加所以才能快
      

  5.   

    select * from (
    select * from table order by id desc) t group by url
    直接排序后group by,取的就是每组第一条数据,也就是id最大值的那条
      

  6.   

    快的方法还是导出数据,然后在EXCEL或者其它工具中直接去重,然后再导入。
      

  7.   

    在应用程序中对该表自制两个以上hash索引(不同hash算法)列,用两个64位整数,如果任意两行的这两个列的值都相同,基本就说明是重复的,对于等值比较hash的优势非常大。