14

MS SQL Server でビューを作成しています。私は MS SQL にあまり触れたことがなく、NO LOCK ヒントについてもよく知りません。機能は理解していますが、自分の状況で使用する必要があるかどうかはわかりません。入れるべきか聞かれましたがわかりません。

ビューを作成するために使用しているすべてのクエリの後に、NO HINT を追加する必要がありますか? それとも、ビュー自体をクエリするユーザーに影響がありますか? USER は VIEW に対するクエリに NO LOCK を追加する必要がありますか?

最善のアプローチに関するガイダンスと説明をいただければ幸いです。

4

2 に答える 2

12

最初にあなたの質問にお答えします。

ビュー内のテーブルではなく、外部からのビューに NOLOCK ヒントを設定することをお勧めします。

例えば

select * from vwTest with (nolock)

また

set transaction isolation level read uncommitted
select * from vwTest

作成者としてこのように行うことで、SQL の経験が豊富であるかどうかにかかわらず、より幅広いユーザー ベースに対応できます。ビューに NOLOCK ヒントをカプセル化しないことで、他の開発者が安全かつ効率的な方法でデータを取得する方法を真剣に考えるようになります。

今NOLOCKの詳細情報。基礎となるデータが変更されていないことを 100% 確信している場合、これは優れたトリックです。良い例は、ETL システムがその日のデータの読み込みを終了したときです。また、レポートの実行間でデータが移動しないことが確実な読み取り専用のレポート システムでも便利です。

それ以外の場合は、システムで使用する推奨ヒントではありません。その意味を本当に理解していなければ、それは良いことよりも害を及ぼします。

NOLOCK が引き起こす可能性のある損害については、次のリンクを参照してください: NOLOCK ヒントが使用されている場合、以前にコミットされた行が失われる可能性があります

于 2013-04-24T02:00:12.757 に答える
5

ドキュメントから直接:

注意: 通常、SQL Server クエリ オプティマイザーはクエリに最適な実行プランを選択するため、ヒントは経験豊富な開発者やデータベース管理者が最後の手段としてのみ使用することをお勧めします。

特に NOLOCK ヒントは悪名高い悪意のある悪い考えです。返されたデータが正しいかどうかを気にしない場合など、特別な状況と特定のニーズにのみ使用する必要があります。

于 2013-04-23T22:50:18.153 に答える