相关疑难解决方法(0)

为什么“LOAD DATA INFILE”比普通的 INSERT 语句快?

我读过一篇文章,提到我们可以通过使用该语句实现每秒 60,000 次插入,该LOAD DATA IN FILE语句从 csv 文件中读取并将数据插入到数据库中。

为什么它应该与普通刀片不同?

编辑:
我通过只调用一个INSERT语句来减少往返:

INSERT INTO tblname
VALUES (NULL,2,'some text here0'),(NULL,2,'some text here1')
    ,(NULL,2,'some text here2'),(NULL,2,'some text here3')
    .....,(NULL,2,'some text here3000');
Run Code Online (Sandbox Code Playgroud)

那这个呢?

mysql bulk import

22
推荐指数
2
解决办法
4万
查看次数

使用 InnoDB 引擎输入几场演出后,MySQL LOAD DATA INFILE 速度降低了 80%

我正在通过 LOAD DATA INFILE 加载一个 100GB 的文件。我在 MyISAM 上取得了很好的成功,几个小时就完成了。

我现在正在尝试使用 InnoDB。负载以超过 10MB/秒的速度快速启动(观察表文件增长,file_per_table已打开)。

但是在大约 5GB 的数据之后它会减慢到 2-4MB/秒的范围,当我超过 20GB 时它会下降大约 2MB/秒。

InnoDB 缓冲池大小为 8G。在运行 LOAD DATA INFILE 命令之前,我已经完成了以下操作:

SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它开始良好并随着时间的推移放缓。

此外,使用相同的设置,我使用 InnoDB 和 MyISAM 以及 5GB 测试数据集对表运行相同的 LOAD DATA INFILE 命令,MyISAM 速度提高了 20 倍:

InnoDB:

mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam performance

14
推荐指数
3
解决办法
3万
查看次数

标签 统计

mysql ×2

bulk ×1

import ×1

innodb ×1

myisam ×1

performance ×1