我听说事务应该是小的,首先我选择更新查询锁定这一行,然后我更新我的数据,所以这是太长了?更新表产品产品图片30张图片更新表产品标签20更新表产品变体10更新表产品选项7x所以这是太长了吗?我需要更新这些行,如果这是太长,否则我必须重新设计我的数据库,我希望你能给予一个好的答复
rqenqsqc1#
首先需要理解的是为什么事务应该很短。这意味着事务应该花费尽可能少的时间。为什么?因为事务需要锁,当这些锁处于活动状态时,这些锁可能会阻塞其他并发事务,而当事务打开时,这些锁处于活动状态。这样,花费大量时间的大型事务会减少并发性。另一方面,您可能需要在一个事务中包含对数据库的多个修改,以确保一致性。此外,在单个事务中修改n行要比在n个事务中修改n行快得多。因此,您需要决定是更喜欢并发性,还是更喜欢一致性和性能。解决这个问题的另一种方法是尝试优化事务,使其尽可能短,以便它们花费尽可能少的时间。我建议您使用以下技术来优化它们:1.使用基于集合的操作,而不是逐行操作。1.使用适当的索引,以避免对那些基于集合的操作进行全表扫描。1.使用存储过程避免多次往返数据库。我想你的事务还没有大到可以显著减少并发的程度,因为我认为它可以在不到100毫秒左右的时间内执行。
1条答案
按热度按时间rqenqsqc1#
首先需要理解的是为什么事务应该很短。这意味着事务应该花费尽可能少的时间。为什么?因为事务需要锁,当这些锁处于活动状态时,这些锁可能会阻塞其他并发事务,而当事务打开时,这些锁处于活动状态。这样,花费大量时间的大型事务会减少并发性。
另一方面,您可能需要在一个事务中包含对数据库的多个修改,以确保一致性。
此外,在单个事务中修改n行要比在n个事务中修改n行快得多。
因此,您需要决定是更喜欢并发性,还是更喜欢一致性和性能。
解决这个问题的另一种方法是尝试优化事务,使其尽可能短,以便它们花费尽可能少的时间。我建议您使用以下技术来优化它们:
1.使用基于集合的操作,而不是逐行操作。
1.使用适当的索引,以避免对那些基于集合的操作进行全表扫描。
1.使用存储过程避免多次往返数据库。
我想你的事务还没有大到可以显著减少并发的程度,因为我认为它可以在不到100毫秒左右的时间内执行。