Позвольте мне настроить ситуацию. Мы пытаемся вставить скромно большое количество строк (примерно 10-20 млн. В день) в скромно широкую таблицу 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 для пакетной обработки данных, и мы видим гораздо лучшую производительность для них. Количество записей немного меньше, что наводит меня на мысль о том, что мы загружаемся до предела размера буфера, когда загружаем большую таблицу, и вынуждены идти на диск (и действительно, что еще, кроме перехода на диск, объясните такое медленное время загрузки?).
... что подводит меня к моему вопросу. Какие настройки my.cnf наиболее важны при работе с командами LOAD DATA INFILE?