ダイレクトインサートとダイレクトパスロードの違い

ダイレクトインサートとはAPPENDヒント付のinsert into selectを指し、ダイレクトパスロードとは direct=yオプションを付与したsqlldrのロードを指します。

ダイレクトインサートとダイレクトパスロードではロード中の索引の扱いが決定的に異なる

以下の違いがあるため単純にinsert文か、sqlldrかの違いだけではありません。

ダイレクトインサート
インサート中も索引は無効化されず、索引メンテナンス処理も従来型同様の処理が走ります。 したがってダイレクトインサート中も索引を利用したselect文は実行可能です。 また、索引メンテナンスが従来型同様なので索引をnologging属性にしてもREDO生成量は従来型と変わりありません。

ダイレクトパスロード
ロード中索引は無効化され、ロード完了後に索引が再構築されます。(sqlldrのパラメータSKIP_INDEX_MAINTENANCE=trueの場合) したがってロード中に対象表をselectした場合索引が使用できずFULLスキャンが選択されます。 索引は一から再構築されるという動作上、nologging属性も有効になりREDO生成量も減るため0件の状態からデータを一括登録する場合はダイレクトインサートよりも早い時間で索引構築まで完了する可能性が高くなります。 逆に、大量データが存在している状態で少件数をロードする場合はダイレクトインサートのほうが早くなります。

★ORACLE案件承ります