› 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 · Jan 7, 2016 · 7533 views
    This topic created in 3957 days ago, the information mentioned may be changed or developed.

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

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

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

    有没有更好的办法呢?

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

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

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

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