Самый быстрый метод, вероятно, состоит в том, чтобы использовать хранимую процедуру, которую вы вызываете только один раз, чтобы избежать обходов (т. Е. Ваше приложение вызывает MySQL, ожидает ответа, отправляет утверждение, получает одобрение, выполняет выражение, получаетсообщение об успехе, ...). Что касается вставки трех фактов, вы, вероятно, можете сделать это одно утверждение, используя UNION ALL
.
Вот пример:
CREATE PROCEDURE myproc
BEGIN
DECLARE v_first_new_insight_id INT DEFAULT 2147483647;
START TRANSACTION;
UPDATE trends SET insight = col1 + col2 + col3 + DATE_FORMAT(CURRENT_DATE, '%d');
INSERT INTO insights (insight) SELECT insight FROM trends;
SET v_first_new_insight_id = LAST_INSERT_ID();
INSERT INTO facts (insight_id, fact)
SELECT insight_id, get_fact1(insight) FROM insights WHERE insight_id >= v_first_new_insight_id
UNION ALL
SELECT insight_id, get_fact2(insight) FROM insights WHERE insight_id >= v_first_new_insight_id
UNION ALL
SELECT insight_id, get_fact3(insight) FROM insights WHERE insight_id >= v_first_new_insight_id
;
COMMIT;
END