让我设置一下情况。我们正在尝试将适量的行数(每天大约 10-20M)插入到适度宽的 MyISAM 表中:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| blah1 | varchar(255) | NO | PRI | | |
| blah2 | varchar(255) | NO | PRI | | |
| blah3 | varchar(5) | NO | PRI | | |
| blah4 | varchar(5) | NO | PRI | | |
| blah5 | varchar(2) | NO | PRI | | |
| blah6 | varchar(2) | NO | PRI | | |
| blah7 | date | NO | PRI | | |
| blah8 | smallint(6) | NO | PRI | | |
| blah9 | varchar(255) | NO | PRI | | |
| blah10 | bigint(20) | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
除了巨大的主键之外,唯一的索引是 blah7,即日期字段。我们正在使用 LOAD DATA INFILE 并看到让我印象非常糟糕的性能,大约需要 2 个小时来加载数据。我被引导相信 LOAD DATA INFILE 比这快几个数量级。
有趣的是,我们有一些不太胖的表(5-6 个字段),我们还使用 LOAD DATA INFILE 将数据批处理到其中,我们看到这些表的性能要好得多。记录的数量要少得多,这让我认为当我们加载大表时我们遇到了缓冲区大小限制,并且必须转到磁盘(实际上,除了磁盘还有什么解释这么慢的加载时间?)。
...这让我想到了我的问题。在处理 LOAD DATA INFILE 命令时,哪些 my.cnf 设置最重要?