0

table1 と table2 の 2 つのテーブルに大量のデータがあり、Table1 には 500 万件、Table2 には 80,000 件のレコードがあります。アップデートを実行していますが、

Update Table1 a
Set 
a.id1=(SELECT DISTINCT p.col21 
         FROM Table2 p 
         WHERE p.col21 = SUBSTR(a.id, 2, LENGTH(a.id));

クエリのsubstrとdistinctが遅くなっています。

  1. このクエリを書き直してプロセスを高速化し、
  2. インデックスを作成する必要がある列
4

3 に答える 3

3

合流かも

 merge into Table1 a
  using Table2 p 
  on (p.col21 = SUBSTR(a.id, 2, LENGTH(a.id))
  When matched then
     update set a.id1 = p.col21;

および の関数ベースのインデックスa.id

于 2012-08-20T14:29:06.147 に答える
1

あなたが動的に計算していることがわかります:

p.col21=SUBSTR(a.id,2,LENGTH(a.id))

これにはかなりの時間がかかり、インデックスを作成できなくなります。その値で実際に列を作成することを検討しましたか? これにより、インデックスが作成され、はるかに高速になります。ID が静的である場合、これは簡単に勝てるように思えます。

于 2012-08-20T14:16:30.430 に答える
0

サブクエリは何行を返し、何行を更新していますか? 更新の数が多いと、インデックスがまったく役に立たない場合があります。

于 2012-08-20T15:10:55.150 に答える