現時点ではEnterpriseなしでOracle 11gを使用しています(残念なことにオプションではありません)。Oracleベースの挿入とセットベースのマージ・パフォーマンス
たとえば、データの行が一定の(つまり、2000としましょう)テーブルがあります。それをdata_sourceと呼ぶことにしよう。
このテーブルのいくつかのカラムを別のテーブルdata_destに挿入したいとします。私は、ソーステーブルからすべてのレコードを使用しています。言い換えれば
、私はこれが、この場合には速いだろう
select data_source.col1, data_source.col2, ... data_source.colN
from data_source
設定を挿入したいと思います:
insert into data_dest
select data_source.col1, data_source.col2, ... data_source.colN
from data_source
OR
merge into data_dest dd
using data_source ds
on (dd.col1 = ds.col1) --Let's assume that this is a matching column names
when not matched
insert (col1,col2...)
values(ds.col1,ds.col2...)
EDIT 1: を我々インサートからの主キー違反がないとみなすことができます。 つまり、insertによってすべての行が正常に挿入されるため、マージすることができます。
'EXPLAIN PLAN FOR the_first_query_insert'、次に' SELECT * FROM table(DBMS_XPLAN.Display) 'を実行してください。 ** 2番目のクエリ**の結果をビットマップではなくテキストとしてコピーする** - 単純な "コピーペースト"を使用して質問に追加する。次に、2番目のクエリのための上記の手順を繰り返します。 ''第2_query_merge'のためのEXPLAIN PLANなど – krokodilko
@krokodilkoええインサートは速くなるようです。 –
@krokodilkoこれは素晴らしいチューニングテクニックです。 –