Разница между CSV-импортом и CSV с использованием LOAD DATA?
В phpMyAdmin есть два варианта импорта CSV файла.
Один из них - CSV. Другой - CSV, используя LOAD DATA.
Какая разница между этими двумя? Есть ли преимущество в использовании одного над другим?
Ответы
Ответ 1
LOAD DATA INFILE - это MySQL-запрос, который работает полностью независимо от PHPMyAdmin.
Импорт CSV, вероятно, предполагает загрузку файла на сервер PHPMyAdmin, где он анализирует файл и строит серию операторов INSERT, которые будут выполняться против сервера.
Лично я бы не стал доверять чему-либо, что PHPMyAdmin делает;-) - однако фактическая производительность, вероятно, будет зависеть от вашей структуры таблицы и данных.
Однако я хочу заметить, что MySQL вставляет некоторые очень эффективные ярлыки при вставке данных из команды LOAD DATA INFILE.
Ответ 2
Как указано выше, параметр LOAD DATA
на самом деле сообщает phpMyAdmin использовать команду MySQL, чтобы MySQL анализировал и загружал файл, а не phpMyAdmin, обрабатывая его сначала.
Как указано выше, предоставление MySQL доступа к загрузке файла может быть опасным, если вы не чувствуете на 100% безопасности относительно источника и точности файла. Это похоже на использование php-формы без защиты вставки sql для вставки данных.
Однако в некоторых случаях phpMyAdmin не форматирует данные правильно или не имеет проблем с его синтаксическим анализом, когда используется обычная CSV
". Это приведет к ошибкам без объяснения, таким как" неверный формат в строке N "или" неверный подсчет полей в строке N "Возможно, это не точные сообщения об ошибках, так как я не зарегистрирован в phpMyAdmin на данный момент. В этих случаях параметр LOAD DATA
может использоваться для передачи ошибки. Я думаю, что дополнительная опция Use local keyword
имеет отношение к тому, чтобы убедиться, что правильные команды для этой конкретной версии MySQL на локальном сервере используются. Однако не уверены в последней части.
Что-то, о чем следует помнить, это также размер файла (количество импортируемых строк). Мне пришлось разбивать файл с линейкой 1600 на более мелкие файлы даже при использовании параметра LOAD DATA
, чтобы заставить его идти через. Он не выдавал ошибок, но "затронутые строки" были неправильными, когда файл был слишком большим.
Ответ 3
Первый параметр будет содержать phpMyAdmin, чтобы проанализировать сам файл CSV, а затем сгенерировать и выполнить SQL для вставки данных. Второй вариант позволит MySQL заботиться о загрузке, обработке и вставке данных.
Оба варианта (должны) ведут себя одинаково, но опция LOAD DATA INFILE, как правило, намного быстрее, и вам не нужно беспокоиться о временных ограничениях памяти и времени выполнения PHP. Единственная проблема заключается в том, что она не поддерживается всеми конфигурациями, потому что есть последствия для обеспечения доступа MySQL к загруженным файлам и, как таковая, часто отключается (например, общий хостинг).
Ответ 4
CSV и CSV с использованием LOAD DATA. Первый метод реализуется внутри phpMyAdmin и является рекомендуемым для его простоты. Со вторым методом phpMyAdmin получает загружаемый файл и передает его в MySQL. Теоретически этот метод должен быть быстрее. Однако у него больше требований из-за самой MySQL
Ответ 5
Чтобы добавить к другим ответам: "CSV" настаивает на том, что у вас точно такое же количество столбцов в текстовом файле и в таблице. "CSV с использованием LOAD DATA" не работает.