如何在 MYSQL 中提高批量插入的性能
How to improve performance of Bulk Inserts in MYSQL
env: windows 10
version mysql 5.7
Ram 32GB
ide : toad mysql
我有足够的硬件要求,但问题是插入到没有任何关系的简单 table 的性能。我需要在 table.
上建立索引
table结构
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;
我正在使用上面的方法将记录插入 table。没有索引大约需要 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 文件的建议,在我的机器中找不到任何文件。
通过在 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,我在另一个link中看到它说它可以将速度提高到160x。
输出性能:超过24hrs到2hrs
如果您从一个空 table 开始,请在创建时不带任何索引。然后,在完全填充 table 之后,据报道添加索引比插入已有索引的速度更快。
参见:
- MySQL optimizing INSERT speed being slowed down because of indices
- 在用数据填充 table 之前或在数据到位之后创建索引更好吗?
可能有帮助:Create an index on a huge MySQL production table without table locking
env: windows 10
version mysql 5.7
Ram 32GB
ide : toad mysql
我有足够的硬件要求,但问题是插入到没有任何关系的简单 table 的性能。我需要在 table.
上建立索引table结构
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;
我正在使用上面的方法将记录插入 table。没有索引大约需要 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 文件的建议,在我的机器中找不到任何文件。
通过在 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,我在另一个link中看到它说它可以将速度提高到160x。 输出性能:超过24hrs到2hrs
如果您从一个空 table 开始,请在创建时不带任何索引。然后,在完全填充 table 之后,据报道添加索引比插入已有索引的速度更快。
参见:
- MySQL optimizing INSERT speed being slowed down because of indices
- 在用数据填充 table 之前或在数据到位之后创建索引更好吗?
可能有帮助:Create an index on a huge MySQL production table without table locking