› 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 · Sep 28, 2016 · 4411 views
    This topic created in 3648 days ago, the information mentioned may be changed or developed.
    目前建立了一个大概几千万的数据,都放在了一个表里,然后进行去重复, 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 replies  •  2016-09-29 08:53:31 +08:00
    yidinghe
        1
    yidinghe  
    PRO
       Sep 28, 2016 via Android
    唯一索引必须先去重
    sw1962
        2
    sw1962  
    OP
       Sep 28, 2016
    @yidinghe 去重是否有快速的代码,我这条都 2 天了,还没完成

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

    另外,注意检查 name, age 列中是否存在 null 值,需要对其单独处理。
    ebony0319
        9
    ebony0319  
       Sep 29, 2016
    这个要看你的对数据库的写入的量。当有大量写入的时候。唯一约束会让插入非常慢。遇到这种情况可以考虑先全部写入,后面再去重,然后建立索引。建议用分页方法去重,那样比较快。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2436 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:08 · PVG 13:08 · LAX 22:08 · JFK 01:08
    ♥ Do have faith in what you're doing.