2016-10-14 10 views
0

毎日テーブルBの2つのデータ値(日付毎日のバックアップ)を更新しようとしていますが、Bには何百万ものレベルデータがあります テーブルAとBの構造はテーブルデータを条件付きで更新するには?

です
A -----Da primary key 
    -----Db 
B -----Da (table may have many Da data) 
    -----Db 
    -----.... 

さて、私のSQLは次のとおりです。

INSERT INTO A (Da,Db) 
    SELECT DISTINCT on(Da)Da,Db 
    FROM B 
    ON conflict(Da) DO UPDATE SET Db = excluded.Db 

しかし、それは非効率的ですが、私は、A.ので判断UPDATEの前に効率を改善します(A.Db = B.Dbがあれば何もしない)を行った場合を考えますほとんどの場合、Db = B.Db(約94%)。 コードを書く方法は私にとっては問題です(私はSQLにあまり慣れていません)。 偉大な神に尋ねられ、厄介です! !

答えて

0

B(Da, Db)のインデックスは、パフォーマンス上の問題を修正するはずです。

ただし、クエリが正しくありません。

INSERT INTO A (Da,Db) 
    SELECT DISTINCT ON (Da) Da, Db 
    FROM B 
    ORDER BY Da, Db 
    ON CONFLICT (Da) DO UPDATE SET Db = excluded.Db; 
+0

しかし...現時点では、ORDER BYで –

+0

右を使用していないというエラーはありませんが、特定の 'Da'のための' Db'のどのあなたがしたいです:DISTINCT ONを使用するときは、ORDER BYを必要とします出力にありますか? –

+0

あなたの答えをありがとう、私はあなたの平均を知っています、そして、Daが同じ日常ならばDbは固定ですので、私は問題を心配する必要はありません...(私は英語でいくつかの問題を抱えています...) –

関連する問題