› 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
tanteng
V2EX  ›  MySQL

Mysql 批量插入数据之前判断重复的好的方案?

  •  
  •   tanteng ·
    tanteng · Jan 7, 2016 · 7405 views
    This topic created in 3922 days ago, the information mentioned may be changed or developed.

    使用 MySQL 做统计,需要查询大量数据计算后重新组装各种数据入库,考虑到大数据量和性能问题,要批量插入数据库,而且可能会出现重复的情况,如何判断重复呢?

    如果在入库前判断重复,需要每条数据都 select 一下判断,不重复的放到数组再一次批量插入,但是这个查询量也是很大的。或者建立联合唯一约束,但是如果其中一条数据插入失败,则整个插入操作都失败。

    现在的做法是先不判断重复,入库后,再找出重复的删掉。。

    有没有更好的办法呢?

    13 replies  •  2016-01-07 19:44:59 +08:00
    realpg
        1
    realpg  
       Jan 7, 2016
    禁止重复的做唯一性约束
    然后
    insert ignore into
    nightspirit
        2
    nightspirit  
       Jan 7, 2016 via iPhone
    可以建立唯一索引,然后记录插入失败的记录
    tanteng
        3
    tanteng  
    OP
       Jan 7, 2016
    @nightspirit 唯一索引可以批量插入数据吗,其中一条失败会不会全失败
    est
        4
    est  
       Jan 7, 2016
    最快速度导入 mysql 是

    LOAD DATA INFILE 'xxx.csv' IGNORE INTO TABLE 就行了。
    ETiV
        5
    ETiV  
       Jan 7, 2016 via iPhone
    如 ls ,最快的导入就是 load data infile

    表引擎换成 myisam ,比 innodb 快 20 倍。
    lyragosa
        6
    lyragosa  
       Jan 7, 2016
    ON DUPLICATE KEY?
    lixiaohan
        7
    lixiaohan  
       Jan 7, 2016
    做唯一性索引, insert into ignore 就这样了
    500miles
        8
    500miles  
       Jan 7, 2016
    如果重复数据 需要被替换更新掉.,

    那么 replace into 或者 on duplicate key 是个好的选择..
    zacard
        9
    zacard  
       Jan 7, 2016
    mark
    tanteng
        10
    tanteng  
    OP
       Jan 7, 2016
    @500miles 请问用 replace into 需要给字段设置什么吗?比如我对重复的定义是其中 A , B , C 三个字段值如果一样就是重复, replace into 认为什么样的数据是重复?
    timsims
        11
    timsims  
       Jan 7, 2016
    insert into ignore 不会进行任何的插入
    on duplicate key 除了唯一 key, 其余字段会覆盖 , 自增的主键不会变化
    replace into 同上,但自增的主键也会有变化(实际上是删了旧的行再插入)
    toben
        12
    toben  
       Jan 7, 2016
    @tanteng 唯一主键
    iyangyuan
        13
    iyangyuan  
       Jan 7, 2016
    缓存 id
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   792 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 19:51 · PVG 03:51 · LAX 12:51 · JFK 15:51
    ♥ Do have faith in what you're doing.