1
yidinghe 2016-09-28 21:05:02 +08:00 via Android
唯一索引必须先去重
|
3
yidinghe 2016-09-28 21:08:32 +08:00 via Android 1
补充下,如果字段能排序的话,可以先创建非唯一索引,然后去重就方便多了:根据条件分段查询并排序,比方每次查 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
这个要看你的对数据库的写入的量。当有大量写入的时候。唯一约束会让插入非常慢。遇到这种情况可以考虑先全部写入,后面再去重,然后建立索引。建议用分页方法去重,那样比较快。
|