вы должны использовать php?потому что вы делаете: 1) один запрос на вывод 100 строк 2) для каждой строки, один запрос на получение идентификатора другой таблицы, а затем еще один запрос на обновление исходной таблицы.И я предполагаю, что исходная таблица больше 100 строк.
Не можете ли вы сделать это непосредственно внутри БД?если значения varchar уникальны, и вы просто хотите, чтобы они были в отдельной таблице, вы можете просто заполнить новую таблицу точно так же, как вы это делали, но указав также идентификатор, который будет удобным идентичным идентификатору исходной таблицы:
INSERT INTO `messages` (`id`, `message`) SELECT `id`, `message` FROM `history`;
Затем создайте новый столбец INT, который будет содержать внешний ключ:
ALTER TABLE history ADD message_id INT;
Затем заполните столбец:
UPDATE history SET message_id = id;
Затем удалите varcharстолбец:
ALTER TABLE history DROP message;
Теперь вы можете добавить ограничение, чтобы указать, что message_id является внешним ключом:
ALTER TABLE history ADD CONSTRAINT fk_message_id FOREIGN KEY message_id REFERENCES messages(id);
Таким образом, вы делаете только 2 итерации: одну для заполнения новой таблицы,и один, чтобы установить новый столбец.