Импортируйте большой файл CSV в MySQL, отключив / включив ограничения и индексы - PullRequest
1 голос
/ 13 декабря 2011

Я хочу импортировать большой файл CSV в таблицу базы данных. Я использую "Mysql" в качестве базы данных. Моя таблица имеет "Innodb" движок, и я импортирую файл CSV с помощью используя следующую команду: "ЗАГРУЗИТЬ ДАННЫЕ [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ......". Мой старший предложил мне использовать эту команду в следующем порядке для более быстрого импорта файла CSV:

1) Отключить или удалить индексы.

2) Отключить или удалить ограничения.

3) Команда данных пожарной нагрузки

4) Включить или воссоздать ограничения

5) Включить или воссоздать индексы.

У меня есть один первичный ключ с автоинкрементом, два внешних ключа и один уникальный индекс на два столбца.

Когда я впервые в базе данных, я искал в Интернете, как включить / отключить ограничения? Из этого я могу понять, что

1) Внутренний ключ имеет один уникальный индекс внутри с ненулевым ограничением

2) Внешний ключ имеет один внутренний индекс с ненулевым ограничением.

3) Также с помощью команды "SET foreign_key_checks = 0" мы можем отключить внешний ключ, но он отключит проверку всех внешних ключей базы данных вместо одной таблицы, поэтому я хочу для одного стола.

4) Я могу отключить уникальный индекс с помощью «ALTER TABLE table_name DISABLE ALL KEYS» .

Итак, у меня следующие сомнения:

1) Могу ли я отключить ограничение внешнего ключа конкретной таблицы, и после отключения он также отключит внутренний индекс или мне придется его удалить.

2) Могу ли я отключить первичный ключ с автоинкрементом, и после отключения он также отключит уникальный индекс внутри, или мне придется удалить его, но я хочу автоинкремент для первого столбца, т.е. для первичного ключа как файла CSV don ' t имеет первое значение столбца.

Кто-нибудь может мне помочь решить эту проблему, спасибо.

1 Ответ

1 голос
/ 17 февраля 2012

Отключение ограничений ключа из таблицы перед импортом дополнительных данных из файла CSV может ускорить импорт, но если вы не уверены на 100%, что вновь импортированные данные CSV не нарушают ограничения ключа, возможно, вы Невозможно воссоздать удаленные ключи после импорта.

  1. Если первый столбец импортируемых данных имеет значение NULL, его импорт заставит Mysql создать порядковый номер новых уникальных ПЕРВИЧНЫХ КЛЮЧЕЙ. Если вы уроните первичный ключ AUTO_INCREMENTING, эта полезная функция будет отключена, и ваши данные будут без первичного ключа. Есть много обходных путей, но большинство из них потребуют больше времени и вычислительных ресурсов, чем просто оставляют PRIMARY KEY во время импорта.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...