본문 바로가기

카테고리 없음

MySQL 성능 개선 프로젝트 6

더미데이터 배송 기사 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초로 단축시킬 수 있었다.