现在有一个tproductdailydata(
productdailydataid,
productid int,
date datetime,
closeprice double(16,6),
adjcloseprice double(16,6),
lastupdate currenttimestamp
)表
我采用mysql bulk load方式导入了几千万条数据,可是我发现里面有个别是有重复的,请如何清理出重复的记录,我要的是根据productid,date可以确定他们是否重复,然后根据lastupdate来清理数据,以max(lastupdate)也就是最新的日期为准保留数据,清理在这个日期前的数据,现在我用SQL语句测试清理少量数据可以的语句,可是要清理几千万条就不行,数据量太大了,请问有没更好的办法进行大量数据重复记录的清理?

解决方案 »

  1.   

    productdailydataid是不是主键?delete t1 from tproductdailydata t1 inner join tproductdaidata t2
    on t1.productid=t2.productid and t1.date=t2.date
    and t1.lastupdate<t2.lastupdate;
      

  2.   


    大量数据下,建议你重导一次了。你先建好表,然后设置一下主键 (productid,date)另外一下方法就是。在这个表上加上  (productid,date) 的索引,(因为你有重复,只能加普通索引)
    然后 select  productid,date,count(*) from tproductdailydata group by tproductdailydata having count(*) >1找出重复项 productid,date 后再进行处理,或者手工处理,或者用程序处理。
      

  3.   


    delete t1 from tproductdailydata t1 inner join tproductdaidata t2
    on t1.productid=t2.productid and t1.date=t2.date
    and t1.productdailydataid!=t2.productdailydataid and t1.lastupdate<t2.lastupdate;
      

  4.   

    http://blog.chinaunix.net/u/29134/showart_375303.html