数時間ごとにバッチ処理して送信する必要がある情報を格納する単一のテーブルがあります。このテーブルの各行は、バッチ処理が必要な 1 つのアイテムに対応しています。数時間ごとに、すべての新しい行に対してクエリを実行しますwhere the state = 'New'
。
これらの行のバッチ処理を開始するときに、行の状態を「バッチ処理中」に設定し、バッチ処理が完了したら、状態を「完了」に設定したいと考えています。
次の SQL はより効率的ですか。
UPDATE BatchTable SET state = <random number> where state = 'New';
SELECT * from BatchTable where state = <random number>;
最初に行うUPDATE
ことで、2 つのスレッドが SELECT を実行し、別のスレッドが行のバッチ処理/更新を行っている間にブロックされることに対処しなければならない状況を回避できますか? を実行するUPDATE
と、他のスレッドからのブロックを回避できますか?
これを行うためのまったく異なる、より良い方法はありますか?