什么mysql设置会影响LOAD DATA INFILE的速度?

5 mysql performance bulk-load load-data-infile

让我说明一下情况.我们试图在适度宽的MyISAM表中插入适度数量的行(大约每天10-20M):

+--------------+--------------+------+-----+---------+-------+
| 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    |       | 
+--------------+--------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

除了那个主键之外唯一的索引是在blah7,即日期字段.我们正在使用LOAD DATA INFILE并且看到令我感觉非常糟糕的性能,加载数据大约需要2个小时.我被引导相信LOAD DATA INFILE比那个快几个数量级.

有趣的是,我们还有一些较少的胖表(5-6个字段),我们也使用LOAD DATA INFILE批量处理数据,我们看到它们的性能要好得多.记录的数量相当小,这使我认为当我们加载大表时,我们正在运行缓冲区大小限制,并且必须转到磁盘(实际上,除了转到磁盘之外还有其他什么解释这种缓慢的加载时间?).

......这让我想到了我的问题.处理LOAD DATA INFILE命令时my.cnf设置最重要的是什么?

mat*_*emp 5

插入索引通常会导致性能下降.在插入数据和重新索引之前删除索引可能会更好.

来自http://forum.percona.com/s/m/983/:

通常情况下,MySQL在MyISAM表中加载数据的速度相当快,但是存在异常,即它不能按排序重建索引,而是逐行构建它们.它可能由于错误的配置(即myisam_max_sort_file_size或myisam_max_extra_sort_file_size太小)而发生,或者如果你有大的(不适合内存)PRIMARY或UNIQUE索引,它可能只是缺乏优化.

另请查看http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/http://www.linuxtopia.org/online_books/database_guides/mysql_5. 1_database_reference_guide/insert-speed.html.


Jor*_*nes 2

我不知道设置,但我的钱花在复合主键上,以解释为什么你的性能如此差。