У меня есть цикл в хранимой процедуре MySQL, где я вставляю запись почти для каждой итерации. Хорошо известная проблема заключается в том, что вставка строка за строкой неэффективна, и вместо этого я предпочел бы видеть вставки с несколькими списками значений.
Псевдо-пример текущей процедуры:
CREATE PROCEDURE p_foo_bar()
BEGIN
DECLARE foo VARCHAR(255);
DECLARE my_cursor CURSOR FOR SELECT foo FROM bar;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1;
cursor_loop:
LOOP
FETCH my_cursor INTO foo;
IF not_found THEN
CLOSE my_cursor;
LEAVE
END IF;
IF foo is something ... THEN
INSERT INTO foobar (foo_colum) VALUES (foo);
-- Anyone knows if it is possible to do bulk insert here:
-- For example:
-- INSERT INTO foobar (foo_column) VALUES (foo), ..., (foo123);
END IF;
END LOOP cursor_loop;
END
Я бы предпочел увидеть запрос INSERT, чтобы увеличить его список значений на некоторое время, а затем периодически делать вкладыши в объемах, но не вижу пути, если это возможно без приготовления огромной миски спагетти.