この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 10821|答える: 0

[出典] SQL SELECT

[リンクをコピー]
掲載地 2016/01/08 17:58:31 | | |

以前、シニア開発者がSQL Serverでクエリをする際にWITH(NOLOCK)を使っているのを見かけて、なぜ使っているのか不思議に思いました。 今、調べてみたところ、クエリ実行時のパフォーマンス向上に役立つことがわかりました。 しかし、それを使うことには欠点もあります。 欠点は、テーブルで更新されているデータが確実に届いているかどうか、つまりロック保護がなければデータが確実に届いていないと保証できないことです クエリが実行されている間に変化します。 このリンクを参照して、かなり役に立ちました。

SQLクエリの性能を向上させるために、一般的に最初に考慮すべきはインデックスを作成することです。 実際、インデックスの確立に加えて、SQLコマンドを配置する際に構文にWITH(NOLOCK)セクションを追加することで、多数のオンラインクエリが存在する環境でデータセットがロックされる現象を改善し、クエリ性能を向上させることができます。

ただし、SQL SELECTと(NOLOCK)を使うとダーティーリードが発生する可能性があることに注意が必要です。

例えば:




SQL Serverは対応するロック整合性チェックを行うためです。 全体のデータベースクエリ性能を向上させるために、SELECT構文のテーブル名の末尾にWITH(NOLOCK)を追加してください。ただし(NOLOCK)も許容されますが、Microsoftは引き続きWITHの追加を推奨しています。

単純なSELECTに加えて、JOINと組み合わせたSELECT構文も使えます。 しかし、DELETE、INSERT、UPDATE、その他のトランザクションが必要なコマンドは良くありません...

一部のファイルでは、WITH(NOLOCK)でSQLクエリ効率を33%向上させることができると書かれています。
WITH(NOLOCK)を追加すると、SQL ServerはSELECTコマンドが現在のテーブルのトランザクションロック状態を考慮しなくてよいと伝え、パフォーマンスが大幅に向上し、データベースシステムのロック現象(デッドロックを含む)を大幅に減少させます。

注意点として、WITH (NOLOCK) は現在のテーブルのトランザクションロックを考慮しないため、トランザクションの複数フェーズ(例えば複数のテーブルにまたがるトランザクション>、例えば引き出しシステムなど)にデータが存在する場合、WITH (NOLOCK) は現在トランザクション処理中のデータを無視します...

率直に言えば、NoLockを使うと、トランザクションがまだ完了していないにもかかわらず修正されたデータを読み取ることができます。 したがって、トランザクションデータのリアルタイムの整合性を考慮する必要がある場合は、WITH(NOLOCK)の使用を慎重に検討すべきです。

トランザクションを考慮しなくていいなら、WITH(NOLOCK)が参考になるかもしれません。

注1:WITH (< table_hint >)
テーブルスキャンを指定する、クエリオプティマイザが使用する1つ以上のインデックス、
またはクエリオプティマイザーがこのデータテーブルを活用し、この文にロックモードを使う方法もあります。

注2:WITH (NOLOCK) は READ UNCOMMITTED に相当します

最後に、nolockとwith(nolock)のいくつかの小さな違いについて話しましょう。
1: SQL05の同義語は(nolock)のみサポートされます;
2: (nolock) はとても簡単に書かれ、その後インデックスを指定します。
サーバー間で文をクエリする際、(nolock)は使えず、nolockのみを使えます
同じサーバー上でクエリを行う場合、(nolock)とnolockの両方を利用できます
たとえば
SQLコード
[IP].a.dbo.table1 から * を (nolock) で選びます。これによりエラーが表示されます * を a.dbo.table1 から (nolock) で選択します。これで動作します




先の:C#はID番号の真ん中の数字を隠します
次に:jQueryはajaxでJSを読み込みます
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com