1 
                    
                    yidinghe      2016-09-28 21:05:02 +08:00 via Android 
                    
                    唯一索引必须先去重 
                 | 
            
     3 
                    
                    yidinghe      2016-09-28 21:08:32 +08:00 via Android    补充下,如果字段能排序的话,可以先创建非唯一索引,然后去重就方便多了:根据条件分段查询并排序,比方每次查 1000 条记录,删掉重复记录后,下次查询以最后一条记录为查询条件继续,直到查不出记录为止。 
                 | 
            
     5 
                    
                    lenmore      2016-09-28 21:24:13 +08:00 
                    
                    先建个 (name, age) 的索引吧,如果 Id 不是主键,把 id 也一块建了。 
                 | 
            
     6 
                    
                    msg7086      2016-09-28 21:28:06 +08:00 via Android 
                    
                    导出,加上唯一索引,导入。 
                用 INSERT IGNORE 。  | 
            
     7 
                    
                    msg7086      2016-09-28 21:29:42 +08:00 via Android 
                    
                    如果要留后来者的话则是用 REPLACE 导出导入。 
                 | 
            
     8 
                    
                    shiyiwan      2016-09-28 21:44:41 +08:00 
                    
                    在去重之前了解重复数据的多寡吗,占比是否超过 5%,还是 20%还是 50%?另外每条数据有多少列,占用空间是多少呢? 
                如果需要删除的数据比较多,可以考虑先把保留的数据取出来放到一张临时表中,然后 truncate 本表,将临时表数据导入回去; 如果需要删除的数据比较少,可以入 @lenmore 建议那样先针对(name, age)建索引,然后执行之前那条语句。 另外,注意检查 name, age 列中是否存在 null 值,需要对其单独处理。  | 
            
     9 
                    
                    ebony0319      2016-09-29 08:53:31 +08:00 
                    
                    这个要看你的对数据库的写入的量。当有大量写入的时候。唯一约束会让插入非常慢。遇到这种情况可以考虑先全部写入,后面再去重,然后建立索引。建议用分页方法去重,那样比较快。 
                 |