0

これはおそらく簡単な質問ですが、私はこれにかなり慣れていません。次のコマンドを使用して、SQL サーバーに列を設定しようとしています。

update myTable 
set myCol = a.col 
from table2 as a 
where a.col_1 = col_1 and a.col_2 = col_2;

myTable は約 1 億 5000 万行です。table2 は約 300,000 行です。table2 に適切にインデックスを付けたので、ルックアップは高速です。これを100万行で個別に試したところ、約20秒かかりました。しかし、テーブル全体には非常に長い時間がかかり、現在は 2 日以上かかっており、まだ完了していません。これに対するより良い解決策があるかどうか疑問に思いました。

前もって感謝します。

4

2 に答える 2

1

UPDATEステートメントの構文は

UPDATE  b 
SET     b.myCol = a.col 
FROM    myTable b
        INNER JOIN table2 a
            ON  a.col_1 = b.col_1 AND
                a.col_2 = b.col_2

INDEX両方のテーブルで (col_1, col_2) に化合物を指定する必要があります。

于 2013-02-04T10:00:22.567 に答える
0

これを試して:

update myTable 
set myTable.myCol = (select a.col from table2 as a 
                     where a.col_1 = myTable.col_1 and 
                     a.col_2 = myTable.col_2
                    )

または、これが機能しない場合は、おそらく結合基準の真の一意性に問題があるためです。

代わりに試してください。

update myTable 
set myTable.myCol = (select top 1 a.col from table2 as a 
                     where a.col_1 = myTable.col_1 and 
                     a.col_2 = myTable.col_2
                    )
于 2013-02-04T10:09:52.633 に答える