Время ожидания PHP при импорте данных в базу данных InnoDB типа mysql

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

Я хочу использовать скрипт установки PHP для автоматизации создания таблицы MySQL и вставки примера базы данных.

В последних версиях mysql теперь установлен тип движка InnoDB, и я могу успешно создать базу данных mysql с использованием PHP — по умолчанию используется тип InnoDB.

Проблема возникает, когда я пытаюсь импортировать пример базы данных (из файла csv) — из 1800 записей только 500 записей импортируются до истечения времени ожидания PHP.

Я придумал возможное решение.

  1. Создайте базу данных mysql с типом MyISAM — используя CREATE TABLE $ table_name …… ENGINE = MyISAM

  2. Импортируйте записи из файла csv в таблицу MyISAM — используя INSERT INTO $ table_name …….

  3. Наконец, измените тип базы данных с MyISAM на InnoDB — используя ALTER TABLE $ table_name ENGINE = InnoDB

Этот трехэтапный процесс работает НАМНОГО быстрее и завершается задолго до истечения времени ожидания сценария PHP.

Я проверил таблицу InnoDB и данные с помощью phpmyadmin, и все, кажется, в порядке.

Может ли кто-нибудь найти ошибку в этом методе, и если да, то можете ли вы предложить простое решение.

-1

Решение

Обработка была бы еще быстрее, если бы вы не делали так много работы.

LOAD DATA INFILE ...

загрузит весь файл CSV за один шаг, без необходимости открывать + читать + разбирать + INSERT каждый ряд один за другим.

Если вам нужно манипулировать любым из столбцов, то эти шаги более общие, но все же намного быстрее, чем любой из ваших методов:

CREATE TABLE tmp ... ENGINE=CSV;  -- and point to your file
INSERT INTO real_table
SELECT ... the columns, suitably manipulated in SQL
FROM tmp;

Нет петли, нет OPEN, нет парсинга.

0

Другие решения

Это происходит со всеми установками apache php и mysql. Вам нужно увеличить максимальное время выполнения Apache, чтобы заставить php загружать большие файлы в mysql.

Я бы порекомендовал вам внимательно изучить файл php.ini и понять, как он контролируется в бэкэнде.

0

По вопросам рекламы [email protected]