小编vce*_*ick的帖子

使用临时表的存储过程性能

我有以下存储过程我想提高性能

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 秒,然后每次调用存储过程都会连续花费更长的时间。

鉴于此存储过程每分钟将被多个线程调用数百次,花费这么长时间是不可接受的。

有没有更好的方法来处理这个存储过程?

mysql stored-procedures

2
推荐指数
1
解决办法
3万
查看次数

标签 统计

mysql ×1

stored-procedures ×1