我有一个表A,它维护表B中的总用户数。我只关心表A中的计数与表B中的用户数同步。
因此,每当我在表B中插入用户时,我希望根据用户插入或删除来递增/递减计数。
有两种方法: - a)如果我在表B中插入行,我可以在一个存储过程中在表A上发出更新计数。这导致两个命令插入后跟更新。因此说需要2秒。 (假设每秒txn在1秒内)
b)我可以在存储过程中编写insert命令。此外,定义一个触发器,在表A中的插入完成后更新表A中的计数。对我来说,这只需要1秒的时间,这只是在表B中插入行。我假设更新表B中的计数的'after insert trigger'在后台发生,因此是异步或非阻止。
这种假设是正确的还是两种方法都需要相同的时间。
注意:我不关心表A中更新计数的时间。因此,我正在寻找一种在非阻塞模式下执行同步作业的方法,就像在队列中一样!
任何建议/意见?
答案 0 :(得分:8)
不,触发器以与存储过程相同的方式绝对同步执行。这意味着如果您开始执行更新触发器中的计数等操作,则可以使用autocommit执行简单查询,在事务中执行大量工作,因此很可能会死锁。你应该知道这一点。
如果你不希望它同步,我想你可以让它插入一个挂起的更改表,然后有一个异步进程来更新它。从长远来看,这可能会避免很多死锁(插入没有二级索引的表不能与另一个插入到同一个表中的死锁,AFAIK)