У меня есть довольно большой набор данных, который мне нужно импортировать в MySQL. Я хотел бы сделать это как можно эффективнее, поскольку мне придется делать это неоднократно. Для этого есть хитрости? Есть ли способ более эффективный, чем расширенные инструкции INSERT?
Чтобы ответить на вопросы в комментарии, исходный формат находится в XML, хотя у меня уже есть преобразователь, чтобы перевести его в формат CSV. Я работаю с MySQL 5.1.x, а целевая база данных - InnoDB. Между данными есть отношения, но у меня нет никаких ограничений, и в большинстве случаев данные недостаточно чисты, чтобы их наложить.
Я бы прочитал mysql manual, думал про INSERT AFTER, но LOAD DATA INFILE выглядит интересно "в 20 раз быстрее" ....
Пытаться mysqlimport вы можете импортировать прямо из файлов CSV.
Есть инструмент ETL с открытым исходным кодом под названием Интеграция данных Pentaho с опцией массовой загрузки mysql (в экспериментальной папке в режиме конструктора). Вы также можете быстро загружать данные независимо от платформы, используя их шаги ввода CSV и вывода таблицы. Если вам нужно выполнить какую-либо обработку данных перед их загрузкой, вы можете закодировать эту логику в этой программе.
Использовать /*!40000 ALTER TABLE tbl_name DISABLE KEYS */;
и /*!40000 ALTER TABLE tbl_name ENABLE KEYS */;
вокруг операторов INSERT для каждой таблицы.
Это обеспечит создание неуникальных индексов после того, как присутствуют все строки, вместо того, чтобы пытаться построить их по частям.
Даже массовая «вставка ...» не займет много времени. Я взял новый экспорт базы данных JIRA размером 200 МБ и загрузил в исходную базу данных примерно за 30 секунд.