我有一个表来存储我需要每隔几个小时批量发送的信息。此表中的每一行对应一个我需要批处理的项目。每隔几个小时,我就会查询所有新行where the state = 'New'
。
当我开始批处理这些行时,我想将行的状态设置为“批处理”,一旦完成批处理,我想将状态设置为“完成”。
下面的 SQL 会不会更高效:
UPDATE BatchTable SET state = <random number> where state = 'New';
SELECT * from BatchTable where state = <random number>;
通过做UPDATE
第一个,它是否可以避免两个线程执行 SELECT 然后可能不得不处理在另一个线程对行进行批处理/更新时被阻塞的情况?如果我做一个UPDATE
,它会避免被其他线程阻塞吗?
有没有完全不同的更好的方法来做到这一点?