データベースの読み取りロックを回避するにはどうすればよいですか?
複数のデータベースへの回答を歓迎します!
SQL Serverでは、selectステートメントでwith(nolock)キーワードを使用できます。例えば:
Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)
クエリの各テーブル/ビューにwith(nolock)を指定してください。
PostgreSQLもMVCC(Multi-Version Concurrency Control)を使用するため、デフォルトのトランザクション分離レベル(読み取りコミット)を使用して、誰かがDBの保守(列/テーブル/インデックスの削除/追加など)を行っていない限り、ブロックしないでください。 。
ジェフ・アトウッドはこのトピックについて良い投稿をしています:
Oracleのデフォルトの動作モードは、読み取りコミット分離レベルであり、selectステートメントは、読み取っているデータを変更する別のトランザクションによってブロックされません。データの同時実行性と一貫性から:
トランザクションによって実行される各クエリには、(トランザクションではなく)クエリが開始される前にコミットされたデータのみが表示されます。Oracleクエリは、ダーティ(コミットされていない)データを読み取ることはありません。
Firebird では、ライターがリーダーをブロックすることはなく、ダーティ リードもありません。コミット済み読み取りおよびスナップショット分離レベルのみ。
単純なページまたはレコードのロックの代わりに、多世代エンジン (オラクルのような) を使用します。