1. 完全重复
可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
  CREATE TABLE 临时表 AS (select distinct * from 表名);
  drop table 正式表;
  insert into 正式表 (select * from 临时表);
  drop table 临时表;2. 部分重复 
delete from 表名 a
 where a.rowid !=
 (
  select max(b.rowid) from 表名 b
  where a.字段1 = b.字段1 and
  a.字段2 = b.字段2
 )
但效率差些

解决方案 »

  1.   

    谢谢楼上的,我也想过这个方法,现在的问题是这个需要多长的时间来完成呢,我是远程操作数据库,而且服务器是在线运行的,随时都要用到这个表,这样做会不会影响业务的运行呀
      

  2.   

    如果你作为关联条件的字段上有索引的话,在线删除应该不会影响业务。但是,切忌一次删除100万数据。可以根据某个关键字的特征,来分批删除。例如:假若存储的用户信息中有身份证号,那么可以根据身份证号前两位(也就是省市),分成31次删除,这样就可以把大的操作所消耗的各种系统资源轻松化解。具体的语句根据你们的业务自己写吧,相信你明白我的意思。
      

  3.   

    你先建立个测试环境来评估一下这个时间,尽量在用户空闲的时候来做.