数据是先建立索引再去重好呢,还是先去重 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
sw1962
V2EX    MySQL

数据是先建立索引再去重好呢,还是先去重

  •  
  •   sw1962 2016-09-28 21:03:35 +08:00 3739 次点击
    这是一个创建于 3304 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前建立了一个大概几千万的数据,都放在了一个表里,然后进行去重复, 2 天了还没完成。
    主要考虑到的是一个表,批量查询数据比较方便



    考虑到这,是否有快速去重的方法。
    代码是:

    DELETE p1 from `1_2016926` p1, `1_2016926` p2 WHERE p1.`name` = p2.`name` AND p1.age = p2.age AND p1.id < p2.id;
    9 条回复    2016-09-29 08:53:31 +08:00
    yidinghe
        1
    yidinghe  
       2016-09-28 21:05:02 +08:00 via Android
    唯一索引必须先去重
    sw1962
        2
    sw1962  
    OP
       2016-09-28 21:06:15 +08:00
    @yidinghe 去重是否有快速的代码,我这条都 2 天了,还没完成

    就是想把 name 和 age 字段重复的去重
    yidinghe
        3
    yidinghe  
       2016-09-28 21:08:32 +08:00 via Android   1
    补充下,如果字段能排序的话,可以先创建非唯一索引,然后去重就方便多了:根据条件分段查询并排序,比方每次查 1000 条记录,删掉重复记录后,下次查询以最后一条记录为查询条件继续,直到查不出记录为止。
    sw1962
        4
    sw1962  
    OP
       2016-09-28 21:16:41 +08:00
    @yidinghe 这个倒没必要,看来要先建立索引再去重,这样速度会快一点
    lenmore
        5
    lenmore  
       2016-09-28 21:24:13 +08:00
    先建个 (name, age) 的索引吧,如果 Id 不是主键,把 id 也一块建了。
    msg7086
        6
    msg7086  
       2016-09-28 21:28:06 +08:00 via Android
    导出,加上唯一索引,导入。
    用 INSERT IGNORE 。
    msg7086
        7
    msg7086  
       2016-09-28 21:29:42 +08:00 via Android
    如果要留后来者的话则是用 REPLACE 导出导入。
    shiyiwan
        8
    shiyiwan  
       2016-09-28 21:44:41 +08:00
    在去重之前了解重复数据的多寡吗,占比是否超过 5%,还是 20%还是 50%?另外每条数据有多少列,占用空间是多少呢?
    如果需要删除的数据比较多,可以考虑先把保留的数据取出来放到一张临时表中,然后 truncate 本表,将临时表数据导入回去;
    如果需要删除的数据比较少,可以入 @lenmore 建议那样先针对(name, age)建索引,然后执行之前那条语句。

    另外,注意检查 name, age 列中是否存在 null 值,需要对其单独处理。
    ebony0319
        9
    ebony0319  
       2016-09-29 08:53:31 +08:00
    这个要看你的对数据库的写入的量。当有大量写入的时候。唯一约束会让插入非常慢。遇到这种情况可以考虑先全部写入,后面再去重,然后建立索引。建议用分页方法去重,那样比较快。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5836 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 02:36 PVG 10:36 LAX 19:36 JFK 22:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86