我们假设您有一个带有计数器的项目表,该计数器计算每个项目的数量。使用此表,您需要检查是否有项目A和项目B中的两项,如果有,则减少计数器。如果你没有足够的两件物品都不会被触及。
最佳解决方案是什么?
启动交易并尝试更新计数为> =所需金额的表格。如果其中一个查询没有更新某些内容,请使用rollback。
首先使用select来检查是否所有项目都在那里,然后按照解决方案1进行操作。
虽然解决方案1是最干净的解决方案,但我仍然担心InnoDB的回滚性能,因为它不是那么好。解决方案1不使用选择,因此当所有项目确实存在时,它显然是最佳解决方案。
但是,如果我们谈论的是一百件物品和一个高失败率(没有足够的一些物品)呢?通过首先选择检查项目是否存在,如果缺少项目并且可以跳过回滚,则不必运行更新。
在这种需要更新大量内容的情况下,您认为最佳解决方案是什么,但它是全部还是全部,而且结果往往是什么? 1,2或其他什么,为什么?
答案 0 :(得分:0)
使用解决方案2.回滚旨在用于从意外故障中恢复,而不是作为正常处理的一部分。
答案 1 :(得分:0)
SELECT item_id, COUNT(*) AS ct FROM tbl GROUP BY item_id;
将在一个声明中为您提供所有计数。
同样对另一个陈述,然后
由于你没有说明计数器的位置等,我不能更具体。