user024801
@user024801

Как уменьшить количество запросов при добавлении строк в базу, и нужно ли уменьшать?

Здравствуйте, нужно вот что:
$res = mysqli_query($connection, "SELECT * FROM table_1");

while ($row = mysqli_fetch_assoc($res)) {

    mysqli_query($db_connection, "INSERT INTO table_2 (line) VALUES ('%s')");

}

(Пример упрощен, но суть передаёт) Из первой таблицы, берется 50-100 строк и копируются во вторую таблицу. Сейчас всё работает замечательно (пока), таблица №1 не большая, таблица №2 (куда будет копироваться строки из таблицы №1) планируется, что достигнет до 1млн строк. Вот только терзают сомнения, что за одну операцию, нужно обратиться около 50-100 к базе и это немного смущает. Можно ли оставить код как есть или нужно менять, чтобы уменьшить запросы к базе? И если да, то как?
  • Вопрос задан
  • 160 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
INSERT ... SELECT
А от запросов в цикле надо бежать как чёрт от ладана.
Ответ написан
shindax
@shindax
Живой. Подвижный. Саркастичный.
Если во второй таблице отстутствует находящиеся в первичном ключе поля, то запрос будет выглядеть так:
INSERT INTO table2 SELECT * FROM table1 WHERE 1
Если таковые имеются, то в запросе нужно перечислить все поля, кроме них:
INSERT INTO table2 ( `field_1`, `field_2`, `field_3` ) SELECT  `field_1`, `field_2`, `field_3`  FROM table1 WHERE 1

Либо-же следить за уникальностью ключей как-то иначе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
И да, если по каким то причинам вам первый не пойдет, по копированию одной таблицы в другую один запросом, то у insert есть муль вставка. Где одним запросом вставляется целый массив данных. И в зависимости от кофигурации сервера ваше БД, то за один раз можно вставить около 1000-2000 записей, а может и больше.
Ответ написан
@slavabars
Веб программист
Вставка insert через (values),(values),(values),(values),(values)
Так же по возможности использовать транзакции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы