Как выполнить пакетную операцию, используя mysql и переполнение стека

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

Следующий код выбирает, собирает и вставляет записи

if(is_array($id_rec)){
$values = "";
foreach($id_rec as $key=>$value){
$values .= "(".(int)$value.",".(int)$id_group."), ";
}
$values = rtrim($values,", ");
$sql = "INSERT IGNORE INTO fu_rec_group_link (id_rec, id_group) VALUES ".$values;
$GLOBALS['db']->execute($sql);

У меня есть два вопроса здесь.

  1. Фрист Вопрос:
    Сколько записей я должен вставить одновременно? Что такое правильное количество?
  2. Второй вопрос:
    Как я могу приостановить / прервать цикл после достижения максимального лимита записей и вставить его, а затем продолжить с левой стороны?

Любая помощь будет принята с благодарностью.

0

Решение

Вы должны вставить как можно больше записей в один INSERT, а не разбивать его на множество INSERTS.

Например, делать

INSERT INTO mytable (column1, column2, column3)
VALUES ('text', 'text', 'text'),
('text', 'text', 'text'),
('text', 'text', 'text'),
('text', 'text', 'text');

быстрее чем делать

INSERT INTO mytable (column1, column2, column3)
VALUES ('text', 'text', 'text'),
('text', 'text', 'text');
INSERT INTO mytable (column1, column2, column3)
VALUES ('text', 'text', 'text'),
('text', 'text', 'text');

Совокупная разница в производительности становится более заметной по мере увеличения количества строк.

1

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

Других решений пока нет …