ダイレクトインサートとダイレクトパスロードの違い
ダイレクトインサートとはAPPENDヒント付のinsert into selectを指し、ダイレクトパスロードとは direct=yオプションを付与したsqlldrのロードを指します。
ダイレクトインサートとダイレクトパスロードではロード中の索引の扱いが決定的に異なる
以下の違いがあるため単純にinsert文か、sqlldrかの違いだけではありません。
ダイレクトインサート
インサート中も索引は無効化されず、索引メンテナンス処理も従来型同様の処理が走ります。
したがってダイレクトインサート中も索引を利用したselect文は実行可能です。
また、索引メンテナンスが従来型同様なので索引をnologging属性にしてもREDO生成量は従来型と変わりありません。
ダイレクトパスロード
ロード中索引は無効化され、ロード完了後に索引が再構築されます。(sqlldrのパラメータSKIP_INDEX_MAINTENANCE=trueの場合)
したがってロード中に対象表をselectした場合索引が使用できずFULLスキャンが選択されます。
索引は一から再構築されるという動作上、nologging属性も有効になりREDO生成量も減るため0件の状態からデータを一括登録する場合はダイレクトインサートよりも早い時間で索引構築まで完了する可能性が高くなります。
逆に、大量データが存在している状態で少件数をロードする場合はダイレクトインサートのほうが早くなります。