2017-11-07 5 views
-1

私は約1億の行のデータを持つテーブルを持っています。私は別のテーブルからいくつかの値に基づいて、このテーブルのいくつかの列(約50)を更新する必要があります。 主キー列は1つだけです。その他の制約はありません。私は処理は数分で実行する必要があり、このデータベーステーブルを更新する最速の方法

UPDATE 
    Table_A 
SET 
    Table_A.col1 = Table_B.col1, 
    Table_A.col2 = Table_B.col2 
FROM 
    Some_Table AS Table_A 
    INNER JOIN Other_Table AS Table_B 
     ON Table_A.id = Table_B.id 
WHERE 
    Table_A.col3 = 'cool' 

よう

何か。 通常のデータベースがその目的を果たしているのですか、または私がメモリデータベースに入れるべきですか?

この単一の更新ステートメントよりも優れた方法はありますか?

答えて

0

答えは、テーブルにインデックスがある場所によって異なります。更新している列で定義した索引が多いほど、更新が遅くなります。これは、2つのテーブルとselect文のwhere句を結合するために必要なインデックスを使用しています。まだ... 50レコードを更新するのに30分は重く聞こえます

+0

私は主キーが1つしかなく、インデックスは作成されていません。 –

+0

50レコード、または100Mレコードに影響する50カラム? –

+0

その50個の列が有効になる可能性があります –

0

これはVertica フラットテーブルアプローチの非常に興味深い使用例です。

Verticaのドキュメントをお読みになることをお勧めします。

ALTER TRABLE table_a ALTER COLUMN col1 
DEFAULT (SELECT col1 FROM table_b WHERE table_b.id=table_a.id); 

(または、その列にすでにデータが含まれている場合、最初に、デフォルトで再度追加それそれから、それをドロップ):

は、あなたができると言えば十分。

かなり良いパフォーマンス結果が得られました。試してみる価値はあると思います....

関連する問題