2016-07-21 10 views
-1
declare @tbl table (id int , name varchar(100)) 

insert into @tbl(id,name) 
value(1,'ravi') 

update @tbl 
set name = 'Shyam' 
where id = 1 

ここで私のテーブルに100万レコードがあり、それらをすべて更新したい場合は、更新すると、それは最適化されたクエリかどうかです。そうでなければ何が最善でしょうか?私たちはオプション(再コンパイル)SQL Serverでの更新statmentを使用することができます

+0

'@のtbl'が悪いのですあなたの場合に選んでください... '#tbl'を使う方が少し好きです – Devart

+0

あなたはあなたの値のソースとしてselectステートメントを使っていますか?おそらく、実際の更新ステートメントをこのような例の代わりに投稿することができれば、それは私たちを助けるでしょう。 –

+1

_ "テーブルに100万レコードあり、それらのすべてを更新したい" _ - どのような最適化をお探しですか?あなたはオプションなしで何百万もの行を読み書きする必要があります。 –

答えて

0

我々ははい、あなたはUPDATE文でオプション(再コンパイル)を使用することができます

SQL Serverでは、更新なステートメントでオプション(再コンパイル)を使用することができます...

ここに私の質問ですテーブルに100万レコードがあり、それらのすべてを更新したい場合は、update(再コンパイル)オプションを使用すると、最適化されたクエリかどうかが判断されます。そうでなければ何が最善でしょうか?

オプション(再コンパイル)ステートメントを最適化していない、それは新しいプランを構築するために、SQL Serverに指示し、キャッシュに格納していけない...

示すように、あなたは、同じ述語でクエリの多くを実行している場合(再コンパイル)は、SQLに現在のデータに基づいて新しいプランを使用するよう指示し、キャッシュに格納しないように指示します。

他のオプションは何ですか?

私はサンプル1とあなたは万件のレコードを持つことになると述べていると信じてこのクエリは...

update @tbl 
set name = 'Shyam' 
where id = 1 

上記のクエリ効率がインデックスの
1.Numberに依存...詳細インデックスあまり効率
2.Locking、お使いのシステム上のブロッキング
ともRAMのような多くの要因が、テーブルはメモリまたはSQLは、ディスクから読み取る必要があるかどうか..

関連する問題