让我先介绍一下情况。我们正在尝试将数量相对较高的行(大约每天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设置最重要?