Преобразование массива с 50 000 + записей в базу данных mysql

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

Я просматриваю каждую часть данных в массиве и вставляю ее в новую таблицу mysql, которую я создал, строки вставляются просто отлично, но проблема в том, что php не позволит моему скрипту выполнять более 60 секунд.

Как я могу переопределить этот параметр?

Существует классическое решение, использующее set_time_limit (), которое позволяет установить максимальное время выполнения (в секундах) для скрипта.

Тем не менее, вам может понадобиться вставить несколько строк с одним запросом или преобразовать массив в CSV и использовать LOAD DATA, который намного быстрее.

Изменить : примеры

Вставка нескольких строк:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

Ссылка: http://dev.mysql.com/doc/refman/5.1/en/insert.html

Использование LOAD DATA:

 LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table; 

Ссылка: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Решения:

  • Установите max_execution_time в 0 в php.ini или используйте set_time_limit()

  • Запустите PHP-скрипт в командной строке. Ограничение времени для CLI-скриптов жестко запрограммировано на 0.

  • Выгрузите массив в CSV-файл, а затем используйте LOAD DATA INFILE чтобы сделать импорт базы данных в 20 раз быстрее, чем вставка одной строки за раз в цикле.

Вы можете использовать функцию set_time_limit () в верхней части страницы, как показано ниже:

 set_time_limit(0); 

Попробуйте ini_set('max_execution_time', $time_in_seconds);

Источник

Если вы используете mysqli, я бы использовал multi_query для выполнения операций. Все будет работать намного быстрее.