MySQL-在实时服务器上执行密集查询
|
我在处理更新和在MySQL数据库中插入数百万行时遇到一些问题。我需要标记表A中的5000万行,将标记的5000万行中的一些数据插入表B,然后再次更新表A中的这5000万行。表A中约有1.3亿行,表B中有8000万行。
这需要在实时服务器上发生,而不能拒绝从网站访问其他查询。问题是当此存储过程正在运行时,来自网站的其他查询最终被锁定,并且HTTP请求超时。
这是SP的要点,出于说明目的进行了一些简化:
CREATE DEFINER=`user`@`localhost` PROCEDURE `MyProcedure`(
totalLimit int
)
BEGIN
SET @totalLimit = totalLimit;
/* Prepare new rows to be issued */
PREPARE STMT FROM \'UPDATE tableA SET `status` = \"Being-Issued\" WHERE `status` = \"Available\" LIMIT ?\';
EXECUTE STMT USING @totalLimit;
/* Insert new rows for usage into tableB */
INSERT INTO tableB (/* my fields */)
SELECT /* some values from TableA */
FROM tableA
WHERE `status` = \"Being-Issued\";
/* Set rows as being issued */
UPDATE tableB SET `status` = \'Issued\' WHERE `status` = \'Being-Issued\';
END$$
DELIMITER ;
没有找到相关结果
已邀请:
2 个回复
苦诫
这应该将锁保持最短的时间。
信藉乒
是一次的金额(在这种情况下为10,000)
是要处理的总金额
是通话之间的休息时间
显然,它可以使用一些数学运算来确保增量(如果不能被平均整除)不会超过总限制,但它似乎可以工作(按工作方式,我是指允许仍然从Web请求中处理其他查询),并且整体上似乎也更快。 这里有什么见识吗?这是一个好主意吗?馊主意?