더미데이터 배송 기사 50만건, 주문 50만건을 넣은 후 1000건의 업데이트가 발생했다고 가정, 1000건의 프로시저 실행
delimiter //
DROP PROCEDURE if EXISTS update_status;
CREATE PROCEDURE `update_status`(
IN `from_id` BIGINT,
IN `to_id` bigint
)
BEGIN
DECLARE current_id BIGINT DEFAULT from_id;
while current_id <= to_id do
UPDATE orders
SET order_status = '배송준비중'
WHERE order_id = current_id;
CALL insert_delivery_processing(current_id);
SET current_id = current_id + 1;
END while;
END//
delimiter ;
CALL update_status(1, 1000);
테스트는 다음과 같은 프로시저를 이용했다.
실행결과 35초가 걸렸다.
추가로 SELECT문의 인덱스를 추가했다.
그리고 다시 실행한 결과
26초로 단축시킬 수 있었다.