我有以下存储过程我想提高性能
DELIMITER $$
CREATE PROCEDURE NEXT_UNIT_OF_WORK
(
IN batchId INT,
IN size INT
)
BEGIN
start transaction;
CREATE TEMPORARY TABLE IF NOT EXISTS BATCH_ITEMS_UOW ENGINE=MEMORY AS (SELECT ID FROM BATCH_ITEMS WHERE STATUS = 'UNPROCESSED' AND BATCH_JOB_ID = batchId LIMIT size);
UPDATE BATCH_ITEMS SET STATUS = 'PROCESSING' WHERE BATCH_JOB_ID = batchID AND ID IN (SELECT ID FROM BATCH_ITEMS_UOW);
SELECT * FROM BATCH_ITEMS_UOW;
DROP TABLE BATCH_ITEMS_UOW;
commit;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
其目的是通过由批处理作业 ID 标识并限制为多个项目(大小)的存储过程获取一批批处理项目。
该查询最初似乎需要 1 秒,然后每次调用存储过程都会连续花费更长的时间。
鉴于此存储过程每分钟将被多个线程调用数百次,花费这么长时间是不可接受的。
有没有更好的方法来处理这个存储过程?