Update
ステートメントでは、最近更新プログラムが3分かかるため、更新に2時間ほどかかります。最近のdbデザインでは、以下のようにストアドプロシージャコードを変更しました。行数が10万を超えるテーブルのVarchar列の更新
詳細は私のシナリオです:私は10百万行以上の非常に大きなファクトテーブルを持っており、条件が満たされたときにそのファクトテーブルの列を更新する必要があります。だから我々は、その列を更新するUPDATE文を書いた:2時間のクエリを実行するために作っているの文が原因でSET文である私の理解あたりとして
declare @var varchar(max) = (select metrcikey from metricdim where metrciname ='XYZ')
Update
fopty
set
Metrickey = metrickey+','[email protected]
from
optyfact opty
inner join
optydim dim on opty.optyid = dim.optyid
inner join
geodim geo on geo.atukey = opty.atukey
inner join
agreementdim ag on opty.optyid = ag.optyid
inner join
account acc on acc.optyid = acc.optyid
where
dim.optytype= 'ABC'
and geo.atukey =145
and ag.agreementtype ='Sold'
and acc.accountteamManager ='XXX'
は、上記のクエリを最適化する方法は、あります
Metrickey = Metrickey + @var
ここMetrickey
列がvarchar
と@var
変数であり、それはより多くの時間を取っているこの文字列を連結するために、もvarchar(max)
です。
上記のクエリを最適化することができたら、大きな助けになるので、varchar
列をvarchar
という値で更新するための最良の方法を提案してください。
'metrickey'の実際のデータタイプは' max'ですか、定義された長さですか?この問題の一部は、変数に 'max'データ型を使用することです。 – JNK
WHERE句のフィールドにインデックスがありますか?フィールドはどのように結合されますか?各テーブルのおおよその行数はどのくらいですか?クエリプランには何が表示されますか(つまり、どのステップのコストが最も高いか)。 –
@JNKと合意しましたが、データ型が最大データ型であっても追加したいと思っていましたが、本当に必要ですか? – HLGEM