Эффективный способ загрузки CSV-файла

Я загружаю содержимое файла csv в базу данных mysql. Я не уверен, какой подход лучше, эффективнее и приятнее.

1] Использование оператора SQL LOAD DATA INFILE

LOAD DATA LOCAL INFILE '/importfile.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(field1, filed2, field3); 

2] Использование сценария для анализа и импорта файла, например. Функция fgetcsv() в php


person JMohasin    schedule 14.03.2012    source источник
comment
Единственный способ сказать наверняка - сравнить их. Но мои деньги определенно на LOAD DATA LOCAL INFILE за скорость и простоту использования.   -  person Michael Berkowski    schedule 14.03.2012
comment
Используя fgetcsv(), вам нужно либо вызвать несколько операторов INSERT, либо написать кучу кода для создания одного очень длинного оператора INSERT с цепочкой VALUES (),(),(),(),().... Собственный импорт CSV в MySQL будет намного проще.   -  person Michael Berkowski    schedule 14.03.2012


Ответы (4)


Если вы можете быть уверены в содержании резюме, используйте метод 1.

Но если вы не уверены, вы можете захотеть, чтобы сценарий выполнил некоторую проверку работоспособности содержимого файла. В этом случае используйте метод 2.

person Ed Heal    schedule 14.03.2012

Загрузка непосредственно в базу данных, вероятно, будет более эффективной, чем использование скрипта — у вас не будет накладных расходов на запуск скрипта, чтение/анализ, составление запросов и т. д. Вы просто перемещаете данные.

Если вам нужно делать это вручную 100 раз в день, вам понадобится что-то более автоматизированное, например скрипт. Затем вам нужно рассмотреть вашу личную эффективность и уровень усилий.

person Surreal Dreams    schedule 14.03.2012

Единственная причина не использовать LOAD DATA INFILE SQL - это если вы обрабатываете некоторые данные. Например, если перед вставкой необходимо преобразовать или объединить данные. Но если это прямой импорт, это, безусловно, самый быстрый.

person Iznogood    schedule 14.03.2012

Я лично предпочитаю LOAD DATA INFILE, потому что загрузка по сценарию обычно использует несколько операторов insert. Если вам нужно изменить CSV, это будет намного проще из скрипта, но по моему опыту LOAD DATA INFILE быстрее.

person JKirchartz    schedule 14.03.2012