Я бы предложил создать таблицу black_hole с полями, соответствующими вашим потребностям для оператора update.
CREATE TABLE bh_table1
..field defs
) ENGINE = BLACKHOLE;
Теперь создайте триггер на столе черной дыры.
DELIMITER $$
CREATE TRIGGER ai_bh_table1_each AFTER INSERT ON bh_table1 FOR EACH ROW
BEGIN
//implicit start transaction happens here.
UPDATE table1 t1 SET t1.field1 = NEW.field1 WHERE t1.id = NEW.id;
//implicit commit happens here.
END $$
DELIMITER ;
Вы можете сделать оператор обновления как вставку в черную дыру.
INSERT INTO bh_table1 (id, field1)
SELECT id, field1
FROM same_table_with_lots_of_rows
WHERE filter_that_still_leaves_lots_of_rows;
Это все равно будет намного медленнее, чем ваше первоначальное обновление.
Позвольте мне знать, как это получается.