SQLクエリで with (NOLOCK) を使用すると実際に実行が速くなるかどうかを誰かが説明できますか? もしそうなら、なぜですか?
2 に答える
を使用NOLOCK
しても、個々のクエリ自体は高速化されません。ただし、他のクエリが同じテーブルにアクセスできるため、デッドロックによって失われる時間が短縮されます。
これは、1 つのクライアントがテーブルを更新することを選択し、トランザクションを完了するのにかなりの時間がかかる場合に特に役立ちます。コマンドを使用してNOLOCK
、他のクライアントがテーブルにアクセスしようとしているクエリを実行できます。更新が完了するのを待つ必要がないため、1 つのトランザクションがまだ進行中であっても、他のトランザクションを完了することができます。
NOLOCK
これは、コマンドを使用することによって単一のクエリのパフォーマンスが向上することを意味するものではありません。複数のクライアントが関係している場合やバッチ実行が行われている場合の全体的なパフォーマンスが向上するだけです。
ただし、 を使用する場合は、ダーティ リードのリスクに注意する必要がありますNOLOCK
。これは、一般的に使用を避けるべき理由を説明する良い記事NOLOCK
です。
WITH (NOLOCK) (ソース):
共有ロックを発行せず、排他ロックを受け入れません。このオプションが有効な場合、コミットされていないトランザクション、または読み取りの途中でロールバックされた一連のページを読み取ることができます。ダーティ リードが可能です。SELECT ステートメントにのみ適用されます。