2012-08-24 23 views
34

すべては、(nolock)が完全にシタスターションに適しているという仮定に基づいています。 (nolock)と一緒に使うかどうか議論する質問は既にたくさんあります。(ノーロック)または(ノーロック) - 違いはありますか?

私は周りを見回してきたとwith(nolock)を使用しての間の実際の差がある場合に見つけることができませんでした:

select customer, zipcode from customers c with(nolock) 

か、単に(nolock)

select customer, zipcode from customers c (nolock) 

は、機能があります両者の違いは?文体?
もう1つは古いですが、廃止される可能性がありますか?

+1

はこちらをご覧ください:http://stackoverflow.com/questions/1723910/syntax-for-nolock-in-sql – paul

+2

彼らは別名です。ヒントが別のオプションで指定されている場合、ヒントはWITHキーワードで指定する必要があります: 'FROM t WITH(TABLOCK、INDEX(myindex))' http://msdn.microsoft.com/en-us/library/ms187373aspx – edze

+1

NolockはREADUNCOMMITTEDとして呼び出すこともでき、SELECT文だけを適用しました。これは、表に対して共用ロックを発行できないことを指定します。これにより、他のトランザクションが表内のデータを変更できなくなります。この投稿を参考にしてください。http://www.sqlserverlogexplorer.com/difference-between-nolock-and-with-nolock/ –

答えて

45

機能的な違いはありませんが、最終的にWITHのない構文は機能しません。これは廃止されました:については、以下のトピックを検索

select customer, zipcode from customers c with (nolock) 

テーブルヒントのためのWITHキーワードを使用していない

は、少なくともSQL Serverの2008年から廃止されました:

select customer, zipcode from customers c (nolock) 

は、だから、この形式を使用する必要がありますフレーズSpecifying table hints without using the WITH keyword.

http://msdn.microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(ご使用されるべきかどうかについての議論nolockはもちろん、別々です。 I've blogged about them here

+0

'with(nolock)'をいつ使用するかについては、 http://stackoverflow.com/question/686724/sql-when-you-use-with-nolock?rq = 1 – Rob

+1

@RobあなたはNOLOCKを使用しないことを意味します、そうですか? :-) –

+0

@AaronBertrand指定したMSDNリンクは、NOLOCKがUPDATEステートメントとDELETEステートメントに対してのみ推奨されていないことを示します。 SELECTステートメントでは推奨されていません。 – Dono

3

実際に使用しているSQL Serverのバージョンによって異なります。

WITHを省略して、SQL Server 2012 table hintsの最新のドキュメントを確認することは推奨されていません。したがって、from customers c (nolock)はおそらく動作しますが、実際に使用する必要がありますfrom customers c WITH (nolock)

これはfrom customers nolockとは異なります。 nolockはテーブルのエイリアスとして機能します。

機能的には;彼らは同じように見えます。

2

私は170000+データ行の結果に対してこれを試しましたが、クエリ実行計画では違いは見られませんでした。どちらも同じように動作します。

+6

これはコメントであり、答えではありません。 1年以上前に機能的な差異がないと既に2回言及されました。 – Leigh

+1

この男に休憩をあげよう... –

+0

小さいものではないテーブルで計画を比較したことは知ってうれしいです。将来参照するには、使用しているSQL Serverのバージョン番号を知ることはおそらく役に立ちます。 (とにかく+1) –

5

(nolock)とwith(nolock)の違いを見つけられません...(nolock)はSQL Server 2000バージョンでは動作しません。

また、リンクサーバーからデータを取得しようとすると「(nolock)」は使用できませんが、「with(nolock)」は使用する必要があります。

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock) 

-- this will work 
select * from server1.DB1.dbo.table1 with (nolock) 
+1

時間を割いてくれてありがとう。これは上記のAaronの記事へのコメントですが、コメントを投稿するという評判はまだありません。あなたのところにあなたを得る+1。 – Rob

関連する問題