Pel*_*ang 6 mysql performance optimization update query-performance
哪个更快?游标循环中的多个更新查询,还是单个查询?例如,在这种情况下,哪个更快?此查询在触发器中。
循环中的多个查询
DECLARE done INT DEFAULT FALSE;
DECLARE record_id INT;
DECLARE cur CURSOR FOR SELECT id FROM table1 WHERE column = 0;
OPEN cur;
users_loop: LOOP
FETCH cur INTO id;
IF done THEN
LEAVE users_loop;
END IF;
UPDATE table2 SET column = 0 WHERE id = id;
END LOOP;
CLOSE cur;
Run Code Online (Sandbox Code Playgroud)单一查询
CREATE TEMPORARY TABLE tmp_table (id int(10));
INSERT INTO tmp_table SELECT id FROM table1 WHERE column = 0;
UPDATE table2 SET column = 0 WHERE id IN(SELECT id FROM temp_table);
DROP TABLE IF EXISTS tmp_table;
Run Code Online (Sandbox Code Playgroud)这取决于很多因素:
如果您有足够的内存、处理器能力和临时表空间,那么您的第二条语句应该是最快的,但缺点是同时发生大量锁定。
运行第一个语句可能会减少所有其他用户的锁定,但这又取决于连接到数据库的用户的事务隔离级别。
正如您所看到的,有很多因素会影响更新语句的执行。
如果没有更多详细信息,我更愿意使用第二个语句来提高速度,而您的第一个语句将在负载环境中使用。
这里也提出了类似的问题: