必ずしも悪いことではありません。
もちろん、コミットされていない値(ロールバックされて論理的に存在しない可能性がある)を読み取ることができます。また、値を複数回読み取ったり、まったく読み取らないなどの現象も許可します。
このような異常が発生しないことを保証する唯一の分離レベルは、シリアル化可能/スナップショットです。スキャンがこの行に到達する前に行が(キーの更新により)移動されると、反復可能な読み取り値が失われる可能性があります。
nolock
ただし、デフォルトでは、この分離レベルでは、読み取るページが64ページ以上あると推定される場合、割り当て順序スキャンを使用するため、これらの問題はより発生しやすくなります。インデックスキーの更新によりページ間で行が移動するときに発生する問題のカテゴリと同様に、これらの割り当て順スキャンはページ分割の問題に対して脆弱です(新しく割り当てられたページがポイントよりもファイル内にある場合、行が失われる可能性があります)既にスキャンされているページがファイル内で後のページに分割されている場合は、既にスキャンされているか、2回読み取られます)。
少なくとも、単純なため(単一テーブル)、これらのスキャンの使用を阻止し、キーを取得することが可能である照会でスキャン命じnolock
単に追加することによって、ORDER BY index_key
そのようクエリにOrdered
の特性がIndexScan
ありますtrue
。
しかし、レポート作成アプリケーションが絶対に正確な数値を必要とせず、そのような不一致の大きな可能性を許容できる場合、それは受け入れられるかもしれません。
しかし、確かに、それが魔法の「ターボ」ボタンであることを期待して、すべてのクエリでそれをチャックするべきではありません。同様に、その分離レベルまたは全く結果に異常な結果に遭遇する大きな確率として(エラー「によるデータの移動にNOLOCKでスキャンを続行できませんでした」)のパフォーマンスも場合があるnolock
非常に悪化することができます。