【发布时间】:2017-05-28 23:21:51
【问题描述】:
我看到到处都有程序员为最快的LOAD DATA INFILE 插入进行优化。但他们从不解释他们的价值观选择等,优化取决于环境,也取决于实际的实际需求。
所以,请解释一下我的 mysql 配置文件中的最佳值是什么,以达到可能的最快插入速度。
我的配置,intel 双核 @ 3.30 GHz,4Gb DDR4 RAM(windows7 说“2.16Gb 可用”,因为保留了内存)。
我的 backup.csv 文件是大约 50 亿个条目的纯文本文件,因此它是一个 500Gb 的巨大文件大小,就像这个方案(但十六进制字符串长度为 64):
"sdlfkjdlfkjslfjsdlfkjslrtrtykdjf";"dlksfjdrtyrylkfjlskjfssdlkfjslsdkjf"
我的表中只有两个字段,第一个是唯一索引。 ROW-FORMAT 设置为 FIXED 以解决节省空间的问题。出于同样的原因,字段类型设置为 BINARY(32)。
我正在使用 MyISAM 引擎。 (因为 innoDB 需要更多空间!)(MySQL 版本 5.1.41)
这是我现在计划使用的代码:
ALTER TABLE verification DISABLE KEYS;
LOCK TABLES verification WRITE;
LOAD DATA INFILE 'G:\\backup.csv'
IGNORE INTO TABLE verification
FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
(@myhash, @myverif) SET hash = UNHEX(@myhash), verif = UNHEX(@myverif);
UNLOCK TABLES;
ALTER TABLE verification ENABLE KEYS;
如您所见,命令 use LOAD DATA INFILE 获取纯文本值,将它们转换为 HEX(最终都是十六进制哈希...)
我听说过缓冲区大小等,以及 MySQL 配置文件中的所有这些值。我应该改变什么,最好的价值是什么? 正如你所看到的,我已经锁定了桌子并禁用了加速它的键。
我还阅读了文档:
myisamchk --keys-used=0 -rq /var/lib/mysql/dbName/tblName
在插入之前这样做也会加快速度。但真正的 tblName 是什么? (因为我有一个 .frm 文件、一个 .MYD 和一个 .MYI,所以我应该指向哪个文件?)
Here are the lasts short hints i did read about optimisation
编辑:忘了说,一切都是本地主机。
【问题讨论】:
标签: mysql optimization myisam load-data-infile