Stack Overflowに取り組む前は、NOLOCK
に反対していました。 SELECT
を実行できる可能性のあるプリンシパル NOLOCK
を使用 古くなっているか一貫性がない可能性のあるデータで結果を取得します。考慮すべき要素は、別のプロセスが同じテーブルからデータを選択しているときに、同時に挿入/更新される可能性のあるレコードの数です。これが頻繁に発生する場合は、READ COMMITED SNAPSHOT
などのデータベースモードを使用しない限り、デッドロックが発生する可能性が高くなります。 。
その後、NOLOCK
の使用に関する見方を変えました。 SELECT
をどのように改善できるかを目撃した後 パフォーマンスだけでなく、大量にロードされたSQLServerでのデッドロックを排除します。データが正確に100%コミットされていないことを気にせず、古くなっている場合でも結果をすぐに戻す必要がある場合があります。
NOLOCK
の使用を検討するときは、自問してください。 :
クエリに
INSERT
の数が多いテーブルが含まれていますか /UPDATE
コマンドと、クエリから返されたデータが特定の瞬間にこれらの変更を見逃している可能性があるかどうかを気にしますか?
答えが「いいえ」の場合は、NOLOCK
を使用します パフォーマンスを向上させるため。
NOLOCK
をすばやく検索しました Stack Overflowのコードベース内のキーワードで138個のインスタンスが見つかったため、かなりの数の場所で使用しています。