複文INSERT ... SELECTは最適化されるため、最後のリクエストを除いたそれぞれのリクエストは、応答として「zero row inserted(挿入された行はありません)」のメッセージを返します。各SELECTで検索された行は、空の宛先テーブルに送られます。最後の INSERT ... SELECTリクエストは、リクエスト全体の挿入行の合計数を返し、宛先テーブルにスプール テーブルをソートおよびマージします。
COMPRESSオプションを指定して定義した列が、高速パスの最適化処理に加えられることはありません。そのため、圧縮列に対してINSERT ... SELECT操作を実行しても、最適化ルーチンはアクセス計画を作成するときに、高速パス最適化を指定することはありません。
INSERT ... SELECTパフォーマンスおよびターゲット テーブルの識別列プライマリ インデックス
挿入元のテーブルと宛先テーブルの構造が同じであるような場合に、挿入元のテーブルから宛先テーブルへの直接結合を可能にするためにINSERT ... SELECTが最適化される場合は、パフォーマンスが3倍も低下する可能性があります。これは、宛先テーブルに識別列プライマリ インデックスがある場合に、スプールを実行したり行を再分散させるために、余分のステップを実行する必要があるためです。
高速パスINSERT...SELECTリクエストのルール
高パフォーマンスの高速パスの最適化を複数文リクエストで実現するには、次の制限に従ってください。
- 宛先テーブルは空でなければなりません。
- 複文リクエスト内のINSERT文の宛先テーブルは、すべて同じでなければなりません。
- リクエストには、INSERT文だけを含めることができます。
複文リクエストにその他のタイプの文を挿入すると、高速パスの最適化は行なわれず(一連のINSERT ... SELECT文の最初のものだけが最適化されます)、処理能力が低下します。