【问题标题】:How to improve performance of Bulk Inserts in MYSQL如何提高 MYSQL 中批量插入的性能
【发布时间】:2018-11-02 23:23:51
【问题描述】:
env: windows 10 
version mysql 5.7
Ram 32GB
ide : toad mysql

我有足够的硬件要求,但问题是插入到没有任何关系的简单表中的性能。我需要在桌子上有索引。

表结构

CREATE TABLE `2017` (
  `MOB_NO` bigint(20) DEFAULT NULL,
  `CAF_SLNO` varchar(50) DEFAULT NULL,
  `CNAME` varchar(58) DEFAULT NULL,
  `ACT_DATE` varchar(200) DEFAULT NULL,
  KEY `2017_index` (`MOB_NO`,`ACT_DATE`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我使用上面的方法将记录插入表中。没有索引大约需要 30 分钟,而索引需要 22 小时。

SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
LOAD DATA LOCAL INFILE 'D:/base/test/2017/2017.txt' 
INTO TABLE 2017COLUMNS TERMINATED BY '|';
commit;

我看到了更改 cnf 文件的建议,在我的机器中找不到任何文件。

【问题讨论】:

  • 30 分钟有多少条记录?
  • 所有记录到数据库中的准确时间是 39.22 秒
  • 我以为你说没有索引需要 30 分钟
  • 没有索引需要 39 分 22 秒,索引需要 22 小时。
  • 您还没有回答问题:您要插入多少条记录?

标签: mysql toad


【解决方案1】:

通过在 my.ini 中添加以下行。我能够做到。

innodb_autoinc_lock_mode =2
sync_binlog=1
bulk_insert_buffer_size=512M
key_buffer_size=512M
read_buffer = 50M

innodb_flush_log_at_trx_commit=2,我在另一个链接中看到它说它将速度提高到 160 倍。 输出性能:超过 24 小时到 2 小时

【讨论】:

    【解决方案2】:

    如果您从一个空表开始,请创建不带任何索引的表。然后,在完全填充表之后,据报道添加索引比插入已经存在的索引要快。

    见:

    可能有帮助:Create an index on a huge MySQL production table without table locking

    【讨论】:

    • 我尝试了其他问题中提到的一些建议 1. 添加数据后更改表 2 创建表转储然后创建索引 3. 使用索引和转储数据创建表。随着插入率的增加,对我有用的倡议文件的 4 项更改
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多