複雑なクエリがあり、700,000以上の行から選択しています。クエリはvarchar
とdate
を返します。T-SQLの更新が選択または挿入よりもかなり遅い
結果がselect
の場合、結果は2分以内で実行されます。私がinsert
を新しいテーブルに入れると、これにはほぼ同じ時間がかかります。もし私がupdate
をしたら、これは1時間以上かかる。
更新クエリは次のようである:
UPDATE
BD
SET
datetext = V1.datetextvalue,
datedate = V1.datevalue
FROM
datatable AS BD
LEFT JOIN
aview1 AS V1
ON BD.indexa = V1.indexa
データテーブルは、次のとおり
primaryKey int
indexa int
datetext varchar(max) NULL
datedate datetime NULL
と、primaryKey
にインデックスがない以外。 inedxa
は一意の値です。
これをスピードアップするにはどうすればよいですか?
UPDATE
上記は、実際のクエリの総単純化及び支持図です。実行計画は非常に複雑で、ほとんど判読できません。私にとって重要な問題は、select
が非常に速いことです。遅いアップデートです。
私は一時テーブルを作成するためにクエリを使用しています - これは迅速です。しかし、私が一時テーブルからメインテーブルを更新する場合、これはちょうど遅いです。
'aview1'の実行計画と定義を追加できますか? –
@ destination-data申し訳ありませんが、質問に追加することを目的としています。上記は、実際のクエリとサポートビューの単純化です。実行計画は非常に複雑で、ほとんど判読できませんでした。私にとって重要な問題は、 'select'が非常に速いことです。遅いアップデートです。 –
そうかもしれないと思われます。表定義がなければ、問題の根本原因を修正するのは難しいです。しかし、@ Vicky_Thinkingが提案した答えは、この問題を回避するのに役立つかもしれません。 –