Я использую PHP, чтобы добавить 95 новых строк в мою базу данных MySQL и вернуть новый идентификатор строки. Время выполнения занимает около 24 секунд. Если я пройду более 30 секунд, PHP прекратит работу (ограничение по умолчанию 30 секунд).
Мне нужно вернуть идентификатор строки для каждой вставленной строки, чтобы я мог использовать его для установки связанных данных.
Мое текущее решение таково:
/* snippets from my class objects to illustrate my code */
// This foreach takes 24 seconds on just 95 rows
foreach($list as $row) {
$id = $this->importRows($sid,$table)
array_push($id_list,$id);
}
/* PDO insertion */
protected function importRows($row) {
$sql = "INSERT INTO my_table (name, colour)
VALUES $row['name'], $row['colour']";
$result = $this->db->exec($sql);
return $this->db->lastInsertId();
}
Чтобы сократить время вставки, я надеюсь, что я могу вставить несколько строк в один запрос
В соответствии с MySQL (прокрутите вниз до красной строки и слова ВАЖНО) там написано:
Если вы вставляете несколько строк, используя один оператор INSERT,
LAST_INSERT_ID () возвращает значение, сгенерированное для первого вставленного
только ряд.
Решение, которое они предлагают, состоит в том, чтобы создать другую таблицу и вставить туда новые идентификаторы, после чего я могу получить новые идентификаторы с помощью оператора select в конце.
Кто-нибудь работал над подобным решением? Любые предложения о том, как я могу сделать это немного более эффективным?