首页 > 解决方案 > 如何提高 MYSQL 中批量插入的性能

问题描述

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 文件的建议,在我的机器中找不到任何文件。

标签: mysqltoad

解决方案


通过在 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 小时


推荐阅读