web-dev-qa-db-ja.com

NOLOCKヒントは、変更されないことが保証されているテーブルで使用しても完全に安全ですか?

  1. データが変更されないことが保証されているテーブルがある場合、そのテーブルに対するSELECTクエリにNOLOCKヒントを追加しても完全に安全ですか?
  2. 一部の行が更新されるテーブルがあり、変更されないことが保証されている行のみを選択している場合、これもNOLOCKヒントを使用する完全に安全なシナリオですか?
5
J.D.

データが変更されないことが保証されているテーブルがある場合、そのテーブルに対するSELECTクエリにNOLOCKヒントを追加しても完全に安全ですか?

実際には、はい(そのように文書化されていませんが)、しかし役に立たない。データが変更されない場合、ダーティリードを使用しても、観察可能な動作や重要なパフォーマンスの違いは発生しません。

一部の行が更新されるテーブルがあり、変更されないことが保証されている行のみを選択している場合、これもNOLOCKヒントを使用する完全に安全なシナリオですか?

いいえ、絶対にありません。ターゲット行を読み取るクエリプランは、適切な同時実行性の制御なしに、変化するデータ構造を読み取る可能性があります。つまり、クエリが奇妙な結果を返さなかったり、間違った結果を返したり、単に失敗したりしないことを期待に戻しています。