Как успешно выполнить Bulk MySQL запросов? - PullRequest
1 голос
/ 10 октября 2011

Я создал скрипт php, который читает лист Excel с тысячами данных и добавляет все данные в базу данных MySQL с помощью запроса вставки. Теперь проблема в том, что данные в Excel-листе выросли с тысяч до миллионов. Так что теперь время ожидания происходит во время выполнения этого скрипта. Я хочу знать, что было бы лучшим решением для запуска всех запросов без тайм-аута?

Также еще одна вещь, я сначала использовал этот скрипт на веб-хостинге, где он закончился тайм-аут на очень мало записей, поэтому позже я выполнил этот скрипт на моем локальном сервере WAMP, и он сохранил больше записей, чем хостинг, все же прошло время ожидания. Так что, если решение этого может работать как на онлайн, так и на локальных серверах, оно будет лучшим.

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

я в своем скрипте использую это:

ini_set("memory_limit", "-1");
set_time_limit(0);
1 голос
/ 10 октября 2011

Если у вас миллионы строк, возможно, вы используете не тот инструмент.

Если возможно, я бы предложил использовать функции LOAD DATA INFILE ( docs ), которые могут напрямую принимать файл csv.Таким образом, вы полностью пропустите слой PHP для вставки.Если вам все еще нужно обработать файл перед добавлением его в базу данных, вы можете попытаться преобразовать данные в нужный формат, сохранить в csv и затем использовать вышеупомянутую функцию.

1 голос
/ 10 октября 2011

Вы всегда можете попробовать установить:

ini_set('memory_limit', '-1');

[ документы ]

или более подходящее значение

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

Также см. Здесь , чтобы повысить эффективность SQL, если вы используете INSERT, также посмотрите на LOAD DATA INFILE:

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

...