如何提高mysql中批量插入的性能

kdfy810k  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(399)
  1. env: windows 10
  2. version mysql 5.7
  3. Ram 32GB
  4. ide : toad mysql

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

  1. CREATE TABLE `2017` (
  2. `MOB_NO` bigint(20) DEFAULT NULL,
  3. `CAF_SLNO` varchar(50) DEFAULT NULL,
  4. `CNAME` varchar(58) DEFAULT NULL,
  5. `ACT_DATE` varchar(200) DEFAULT NULL,
  6. KEY `2017_index` (`MOB_NO`,`ACT_DATE`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

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

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

qhhrdooz

qhhrdooz1#

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

  1. innodb_autoinc_lock_mode =2
  2. sync_binlog=1
  3. bulk_insert_buffer_size=512M
  4. key_buffer_size=512M
  5. read_buffer = 50M

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

wsxa1bj1

wsxa1bj12#

如果以空表开始,则创建它时不带任何索引。然后,在完全填充表之后,添加索引的速度要比插入索引的速度快。
请参见:
mysql优化插入速度因索引而减慢
在用数据填充表之前还是在数据就位之后创建索引更好?
可能有用:在一个巨大的mysql生产表上创建一个索引,而不需要表锁定

相关问题