17.00 - 17.05 - EXPLAINリクエスト修飾子と列パーティション アクセス - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLリクエストおよびトランザクション処理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

EXPLAINレポートは、問合わせの最適化の間に実行される列パーティション アクセス、削除、結合、および列パーティション排除を示します。

例のテーブル定義

次のCREATE TABLEリクエストのセットは、このトピックの例で使用するテーブルの定義です。すべてのテーブルは、データベースPLSに作成されます。ここに示された各例では、20個の列パーティション コンテキストが使用できると考えられます。

CREATE TABLE t1 (
 a INTEGER,
 b INTEGER,
 c INTEGER,
 d INTEGER,
 e INTEGER,
 f INTEGER,
 g INTEGER,
 h INTEGER,
 i INTEGER,
 j INTEGER,
 k INTEGER,
 l INTEGER,
 m INTEGER,
 n INTEGER,
 o INTEGER,
 p INTEGER,
 q INTEGER,
 r INTEGER,
 s INTEGER,
 t INTEGER,
 u INTEGER,
 v INTEGER,
 w INTEGER,
 x INTEGER,
 y INTEGER,
 z INTEGER)
PARTITION BY COLUMN;

CREATE TABLE t2 AS t1
WITH NO DATA
PRIMARY INDEX (a,b);

CREATE TABLE t3 AS t1
WITH NO DATA;

CREATE TABLE t4 AS t1
WITH NO DATA
NO PRIMARY INDEX
PARTITION BY (COLUMN, RANGE_N(b BETWEEN 1
                                AND    10
                                EACH    1);

CREATE TABLE t5 (
 a INTEGER,
 b INTEGER,
 c INTEGER,
 d INTEGER,
 e INTEGER,
 f INTEGER,
 g INTEGER,
 h INTEGER,
 i INTEGER,
 j INTEGER)
PARTITION BY COLUMN;
 
CREATE TABLE t6 AS t5
WITH NO DATA
PRIMARY INDEX (a,b);

列パーティション化されたテーブルから少数の列を選択する

この例では、列パーティション化されたテーブルPLS.t1から、4つの列を選択する場合のEXPLAINテキストの一部を示します。

5つの列パーティションがEXPLAINテキストで報告されています。これらのパーティションの内容は、SELECTリクエストの選択リストで指定された4つの列パーティションと、削除列パーティションになります。

EXPLAIN 
SELECT a, b, g, p
FROM t1;
...
3) We do an all-AMPs RETRIEVE step from 5 column partitions of 
   PLS.t1 by way of an all-rows scan with no residual conditions
   into Spool 1 (all_amps), which is built locally on the AMPs. 
   The size of Spool 1 is estimated with low confidence to be 2 rows
   (614 bytes). The estimated time for this step is 0.01 seconds.
...

この説明内の新しい用語は、次のように定義されます。

定義
from 5 column partitions of 要求された4つの列と削除列が、報告された列パーティションからアクセスされることになります。5つのパーティションをすべて一度に処理するために必要なコンテキストがあります。

列パーティション化されたテーブルから多数の列を選択する

この例では、列パーティション化されたテーブルPLS.t1から、19の列を選択する場合のEXPLAINテキストの一部を示します。

列パーティション数の20個の内容は、SELECTリクエストの選択リストで指定された19個の列パーティションと、削除列パーティションになります。

EXPLAIN 
SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t
FROM t1;
...
3) We do an all-AMPs RETRIEVE step from 20 column partitions of 
   PLS.t1 by way of an all-rows scan with no residual conditions into
   Spool 1(all_amps), which is built locally on the AMPs. The size of
   Spool 1 is estimated with low confidence to be 2 rows (614 bytes).
   The estimated time for this step is 0.01 seconds.
...

列パーティション化されたテーブルから使用できるコンテキスト数よりも多くの列を選択する

この例では、列パーティション化されたテーブルPLS.t1から、26列中20列を選択する場合のEXPLAINテキストの一部を示します。この例では、リクエストを最適に処理するために十分なコンテキストが使用できません。(この例の場合は20のコンテキストが使用可能で、その他のシステムの場合は通常それ以上の数のコンテキストを使用できます。)

EXPLAIN 
SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u
FROM t1;
...
3) We do an all-AMPs RETRIEVE step from 21 column partitions (20 
   contexts) of PLS.t1 using covering CP merge Spool 2 (2 subrow 
   partitions and Last Use)  by way of an all-rows scan with no
   residual conditions into Spool 1 (all_amps), which is built locally
   on the AMPs. The size of Spool 1 is estimated with low confidence
   to be 2 rows (614 bytes). The estimated time for this step is
   0.03 seconds.
...

ステップ3で取得された21個の列パーティションの内容は、SELECTリクエストの選択リストで指定された20個の選択済みパーティションと削除列パーティション(列パーティション化されたテーブルからのパーティション)になります。

このシステム上では、21は使用可能な20個の列パーティション コンテキスト数を超えているため、Teradata Databaseは列パーティション化されたテーブルPLS.t1の20個の列パーティションを削除列パーティションも含めて、CPマージ スプールの最初の副行列パーティションにマージします。列パーティション化された表にあるアクセスする必要のある残りの列パーティションは、合計2つの副行列パーティション用のCPマージ スプール内の2番目の副行列パーティションにコピーされます。これにより、使用可能な列パーティション コンテキストの数で制限されている、1回でアクセスできる列パーティションの数を減らせます。結果は、CPマージ スプールの2つの副行列パーティションから取得されます。

この説明内の新しい用語は、次のように定義されます。

定義
from 21 column partitions (20 contexts) of PLS.t1 using covering CP merge Spool 2 (2 subrow partitions and Last Use) 20個の列パーティション コンテキストを使用してPLS.t1の最大21個の列パーティションにアクセスする必要があります。CPマージ プールは、PLS.t1のいくつかの列パーティションをマージするために作成され使用され、その結果としての2つのセカンダリ行列パーティションがCPマージ スプールから読み取られます。

必要になるマージの回数は、アクセスする必要のある列パーティションの数と、使用できる列パーティションの数(先行するfrom 21 column partitions (20 contexts)句で示される)に応じて決まります。

列パーティション化されたテーブルからすべての列を選択する

この例では、列パーティション化されたテーブルPLS.t1から、すべての列を選択する場合のEXPLAINテキストの一部を示します。

EXPLAIN 
SELECT *
FROM t1;
...
3) We do an all-AMPs RETRIEVE step from 27 column partitions (20 
   contexts) of PLS.t1 using covering CP merge Spool 2 (2 subrow 
   partitions and Last Use)  by way of an all-rows scan with no
   residual conditions into Spool 1 (all_amps), which is built locally
   on the AMPs. The size of Spool 1 is estimated with low confidence
   to be 2 rows (614 bytes). The estimated time for this step is
   0.03 seconds.
...

マルチレベルの列パーティションおよび行パーティション テーブルからの全列の選択

この例では、マルチレベルで列パーティション化と行パーティション化されたテーブルPLS.t4のすべての列を選択する場合のEXPLAINテキストの一部を示しています。

これは、前述の例と類似していますが、列パーティション化と行パーティション化が混在するテーブルの2つのパーティションのみを読み取る必要がある点が異なります。アクセス対象の27個の列パーティションと2個の行パーティション(27個の各列パーティションからの2個の行パーティション)があるため、52個の組み合わせパーティションがアクセス対象になります。

EXPLAIN 
SELECT *
FROM t4
WHERE b BETWEEN 4 AND 5;
...
3) We do an all-AMPs RETRIEVE step from 52 combined partitions (27 
   column partitions and 20 contexts) of PLS.t4 using covering CP 
   merge Spool 2 (2 subrow partitions and Last Use)  with a condition
   of ("(PLS.t4.b <= 5) AND (PLS.t4.b >= 4)") into Spool 1(all_amps),
   which is built locally on the AMPs. The size of Spool 1 is
   estimated with no confidence to be 1 row (307 bytes). The
   estimated time for this step is 0.03 seconds.
...

この説明内の新しい用語は、次のように定義されます。

定義
from 52 combined partitions (27 column partitions and 20 contexts) of PLS.t4 using covering CP merge Spool 2 (2 subrow partitions and Last Use) この句は、テーブルt4の最大52個の組み合わせパーティションの行および列にアクセスする必要があることを意味します。列パーティション化レベルごとに、27個の列パーティションにアクセスする必要があります。

この句が出現する場合、列パーティション化されたテーブルまたは結合インデックスは、この例のt4のように、行パーティション化と列パーティション化の両方が行なわれています。

列パーティション化レベルごとに、20個の列パーティション コンテキストが、最大27個の列パーティションにアクセスするために使用されます。

52個の組み合わせパーティションと27個の列パーティションはどちらも2よりも大きいため、この句が報告されるための条件を満たしています。

20個のコンテキストは2より大きく27-1 (つまり、26)より小さいため、この句が報告されるための条件を満たしています。

アクセス対象の列パーティションの1つが削除列パーティションである可能性があります。該当する行がない場合は、m1個の列パーティションの一部にはアクセスする必要がなくなります。テーブル名(t4)の後ろにusing covering CP merge Spool句が続きます。

マルチレベルで列パーティション化と行パーティション化されたテーブルから複数の列を選択する

この例では、マルチレベルで列パーティション化と行パーティション化されたテーブルPLS.t4の26列中20列を選択する場合のEXPLAINテキストの一部を示しています。

EXPLAIN 
SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u
FROM t4
WHERE b BETWEEN 4 AND 5;
...
3) We do an all-AMPs RETRIEVE step from 42 combined partitions (21 
   column partitions and 20 contexts) of PLS.t4 using covering CP 
   merge Spool 2 (2 subrow partitions and Last Use)  with a 
   condition of ("(PLS.t4.b <= 5) AND (PLS.t4.b >= 4)") into 
   Spool 1(all_amps), which is built locally on the AMPs. The size 
   of Spool 1 is estimated with no confidence to be 1 row (307 bytes). 
   The estimated time for this step is 0.03 seconds.
...

マルチレベルで列パーティション化と行パーティション化されたテーブルから列を選択する

この例では、マルチレベルで列パーティション化と行パーティション化されたテーブルPLS.t4の26列中19列を選択する場合のEXPLAINテキストの一部を示しています。

EXPLAIN 
SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t
FROM t4
WHERE b BETWEEN 4 AND 5;
...
3) We do an all-AMPs RETRIEVE step from 40 combined partitions (20 
   column partitions) of  PLS.t4 with a condition of 
   ("(PLS.t4.b <= 5)AND (PLS.t4.b >= 4)") into Spool 1(all_amps), 
   which is builtlocally on the AMPs. The size of Spool 1 is estimated 
   with noconfidence to be 1 row (307 bytes). The estimated
   time for this step is 0.03 seconds.
...

WHERE句で26列を指定する述部を使用して列パーティション化されたテーブルから2つの列を選択する

この例では、列パーティション化されたテーブルPLS.t1の2つの列を、そのテーブルからの26個の各列に対して指定されたWHERE句条件を使用して選択する場合のEXPLAINテキストの一部を示します。

EXPLAIN 
SELECT a, q
FROM t1
WHERE a>1
AND   b<=1000
AND   c=10
AND   d=11
AND   e<40
AND   f<>87
AND   g=92
AND   h>=101
AND   i=3000
AND   j>=5
AND   k=12
AND   l=0
AND   m=0
AND   n IS NOT NULL
AND   o=1
AND   p=-1
AND   q=1
AND   r<10
AND   s=9
AND   t>33
AND   u=0
AND   v=0
AND   w=0
AND   x>101
AND   y=0
AND   z=0;
...
3) We do an all-AMPs RETRIEVE step from 2 column partitions of PLS.t1 using rowid Spool 2 (Last Use) built from 27 column partitions (20 contexts and Last use) 
   with a condition of 
   ("(PLS.t1.a > 1) AND (PLS.t1.b <= 1000) AND (PLS.t1.c = 10) 
   AND (PLS.t1.d = 11) AND (PLS.t1.e < 40) AND (PLS.t1.f <> 87) 
   AND (PLS.t1.g = 92) AND (PLS.t1.h >= 101) AND
   (PLS.t1.i = 3000) AND (PLS.t1.j >= 5) AND (PLS.t1.k = 12) AND
   (PLS.t1.l = 0) AND (PLS.t1.m = 0) AND (PLS.t1.n IS NOT NULL)
   AND (PLS.t1.o = 1) AND (PLS.t1.p = -1) AND (PLS.t1.q = 1) AND
   (PLS.t1.r < 10) AND (PLS.t1.s = 9) AND (PLS.t1.t > 33) AND
   (PLS.t1.u = 0) AND (PLS.t1.v = 0) AND (PLS.t1.w = 0) AND 
   (PLS.t1.x > 101) AND (PLS.t1.y = 0) AND
   (PLS.t1.z = 0)") into Spool 1 (all_amps), which is built locally
   on the AMPs. The size of Spool 1 is estimated with no confidence
   to be 1 row (307 bytes). The estimated time for this step is
   0.03 seconds.
...

この説明内の新しい用語は、次のように定義されます。

定義
from 2 partitions of PLS.t1 using rowid Spool 2 (Last Use) built from 27 column partitions (20 contexts and Last use) (27個の列パーション(20個のコンテキストおよびLast use)から作成した行IDスプール2(Last Use)を使用してPLS.t1の2個のパーティションから) PLS.t1の最大2つの列パーティションにアクセスする必要があります。2個の列パーティションのそれぞれに使用できる列パーティションのコンテキストが存在します。

適格なテーブルまたは結合インデックス内の行の行IDを格納する行IDスプールが作成され、列パーティション化されたテーブルまたは結合インデックスが、この行IDスプール主導で読み取られます。これで、この行IDスプールの使用が終わるため、このスプールを削除できます。kは、行IDスプールのスプール番号です。

WHERE句で26列を指定する述部を使用して列パーティション化されたテーブルから21つの列を選択する

この例では、列パーティション化されたテーブルの26個の列のうち21個を、それらの各列に指定されたWHERE句内の述部を使用して選択する場合のEXPLAINテキストの一部を示しています。

EXPLAIN 
SELECT a,b,c,d,e,f,g,h,i,j,k,l,m,o,p,q,r,s,t,u,v
FROM t1
WHERE a>1
AND b<=1000
AND c=10
AND d=11
AND e<40
AND f<>87 
AND g=92
AND h>=101
AND i=3000
AND j>=5
AND k=12 
AND l=0
AND m=0
AND n IS NOT NULL
AND o=1
AND p=-1 
AND q=1
AND r<10
AND s=9
AND t>33
AND u=0
AND v=0
AND w=0
AND x>101
AND y=0
AND z=0;
...
3) We do an all-AMPs RETRIEVE step from 21 column partitions of PLS.t1 using covering CP merge Spool 3 (20 contexts and Last Use) and rowid Spool 2 (Last Use) built from 27 column partitions (20 contexts and Last use)
   with a condition of("(PLS.t1.a > 1)
   AND (PLS.t1.b <= 1000) AND (PLS.t1.c = 10) AND (PLS.t1.d = 11)
   AND (PLS.t1.e < 40) AND (PLS.t1.f <> 87) AND (PLS.t1.g = 92)
   AND (PLS.t1.h >= 101) AND (PLS.t1.i = 3000) AND (PLS.t1.j >= 5)
   AND (PLS.t1.k = 12) AND (PLS.t1.l = 0) AND (PLS.t1.m = 0) AND
   (PLS.t1.n IS NOT NULL) AND (PLS.t1.o = 1) AND (PLS.t1.p = -1)
   AND (PLS.t1.q = 1) AND (PLS.t1.r < 10) AND (PLS.t1.s = 9)
   AND (PLS.t1.t > 33) AND (PLS.t1.u = 0) AND (PLS.t1.v = 0)
   AND (PLS.t1.w = 0) AND (PLS.t1.x > 101) AND (PLS.t1.y = 0) AND
   (PLS.t1.z = 0)") into Spool 1 (all_amps), which is built locally
   on the AMPs. The size of Spool 1 is estimated with no confidence
   to be 1 row (307 bytes). The estimated time for this step is 0.03
   seconds.
...

この説明内の新しい用語は、次のように定義されます。

定義
from 21 column partitions of PLS.t1 using covering CP merge Spool 3 (20 contexts and Last Use) and rowid Spool 2 (Last Use) built from 27 column partitions (20 contexts and Last use) PLS.t1の最大21つの列パーティションにアクセスする必要があります。2個の列パーティションのそれぞれに使用できる列パーティションのコンテキストが存在します。

列パーティション化されたマージ スプールは、PLS.t1の列パーティションをマージするために作成および使用され、その結果としての列パーティションは、その列パーティション化されたマージ スプールから読み取られます。

適格なPLS.t1内の行の行IDを格納する行IDスプールが作成され、列パーティション化されたテーブルが、この行IDスプール主導で読み取られます。これで、この行IDスプールの使用が終わるため、このスプールを削除できます。

プライマリ インデックスの付いたパーティション化されていないテーブルから、列パーティション化されたテーブルへのデフォルトのロックを使用したINSERT … SELECT

この例では、パーティション化されていないプライマリ インデックスの付いたテーブルPLS.t6にデフォルトのロックを使用して、PLS.t5のすべての列を、列パーティション化されたテーブルPLS.t6に挿入する場合のEXPLAINテキストの一部を示します。

EXPLAIN INSERT INTO t5
SELECT *
FROM t6;
...
4) We do an all-AMPs MERGE into 10 column partitions of 
   PLS.t5 from PLS.t6. The size is estimated with no confidence to be
   2 rows. The estimated time for this step is 0.71 seconds.
5) We spoil the parser's dictionary cache for the table.
...

10個の列パーティションがPLS.t6からのデフォルトのユーザー指定の列パーティションになります。この定義はPLS.t5からコピーされていますが、列パーティション化も行パーティション化もされていません。また、列aと列bに対するプライマリ インデックスも定義されていません。削除列パーティションに影響はありません。

この説明内の新しい用語は、次のように定義されます。

定義
MERGE into 10 column partitions of テーブルPLS.t6 (この場合、列パーティション化が行なわれている)の最大10個の組み合わせパーティションの行と列がアクセス対象になります。

プライマリ インデックスの付いたパーティション化されていないテーブルから、列パーティション化されたテーブルへのLOCKING修飾子を使用したINSERT … SELECT

この例では、INSERT … SELECTリクエストを使用して、列パーティション化されていないテーブルPLS.t6のすべての列を、列パーティション化されているテーブルPLS.t5に挿入する場合のEXPLAINテキストの一部を示します。このとき、PLS.t6をACCESS用にロックするためにLOCKINGリクエスト修飾子を使用します。

EXPLAIN LOCKING t6 FOR ACCESS
INSERT INTO t5
 SELECT *
 FROM t6;
1) First, we lock a distinct PLS."pseudo table" for write on a RowHash
   to prevent global deadlock for PLS.t5.
2) Next, we lock a distinct PLS."pseudo table" for access on a RowHash
   to prevent global deadlock for PLS.t6.
3) We lock PLS.t5 for write, and we lock PLS.t6 for access.
4) We do an all-AMPs MERGE into 10 column partitions of 
   PLS.t5 from PLS.t6. The size is estimated with no confidence to be
   2 rows. The estimated time for this step is 0.71 seconds.
5) We spoil the parser's dictionary cache for the table.
6) Finally, we send out an END TRANSACTION step to all AMPs involved
   in processing the request.
-> No rows are returned to the user as the result of statement 1.
   The total estimated time is 0.72 seconds.

パーティション化されていないプライマリ インデックス付きのソース テーブルから、列パーティション化されたターゲット テーブルへのINSERT … SELECT

この例では、プライマリ インデックスの付いたパーティション化されていないテーブルPLS.t2のすべての列を、列パーティション化されたテーブルPLS.t1に挿入するINSERT … SELECTリクエストについてのEXPLAINテキストを示します。

EXPLAIN INSERT INTO t1
 SELECT * 
 FROM t2;
...
4) We do an all-AMPs MERGE into 26 column partitions (20 contexts) of
   PLS.t1 from PLS.t2. The size is estimated with no 
   confidence to be 2 rows. The estimated time for this 
   step is 0.71 seconds.
 5) We spoil the parser's dictionary cache for the table.
...

この説明内の新しい用語は、次のように定義されます。

定義
MERGE into 26 column partitions (20 contexts) of テーブルPLS.t1 (この場合、列パーティション化が行なわれている)の列がアクセス対象になります。

20個のコンテキストを使用して、26個の組み合わせパーティションにアクセスします。使用できるコンテキストが20個では26個の組み合わせパーティションを収容できないため、ソース テーブルt2に対する2回のスキャンが必要になります。

20個の列をt1にマージします。

残りの6個の列をt1にマージします。

t2に対するREADロックが存在するため、各スキャンでの行読み取りは同じになります。

パーティション化されていないプライマリ インデックス付きのソース テーブルからおよびLOCKINGリクエストの列パーティション化されたターゲット テーブルへのINSERT … SELECT

この例は、前述の例と類似していますが、ソース テーブルに対してLOCKINGリクエスト修飾子を指定している点が異なります。この例では、プライマリ インデックスの付いたパーティション化されていない テーブルPLS.t2のすべての列を、列パーティション化されたテーブルPLS.t1に挿入する場合のEXPLAINテキストを示します。この場合、ソース テーブルPLS.t2を先にスプールしてから、そのテーブルの行をターゲットの列パーティション化されたテーブルPLS.t1に挿入する必要があります。

また、前の例のように、テーブルt2が2回読み取られていた場合は、最初のスキャンと2回目のスキャンで行が変化していることがあり、テーブルt1が破損する可能性があることに注意してください。

EXPLAIN LOCKING t2 FOR ACCESS
INSERT INTO t1
 SELECT *
 FROM t2;
...
4) We do an all-AMPs RETRIEVE step from PLS.t2 by way of an all-rows
   scan with no residual conditions into Spool 1 (all_amps), which is
   spooled locally on the AMPs. The size of Spool 1 is estimated with
   low confidence to be 2 rows (614 bytes). The estimated time for this
   step is 0.01 seconds.
5) We do an all-AMPs MERGE into 26 column partitions (20 contexts) of  PLS.t1 from Spool 1 (Last Use). The size
   is estimated with low confidence to be 2 rows. The estimated 
   time for this step is 0.71 seconds.
6) We spoil the parser's dictionary cache for the table.
...

列パーティション化されたソース テーブルから列パーティション化されたターゲット テーブルへのINSERT … SELECT

この例では、列パーティション化されたテーブルPLS.t3のすべての列を、列パーティション化されたテーブルPLS.t1に挿入する場合のEXPLAINテキストの一部を示します。

EXPLAIN INSERT INTO t1
 SELECT *
 FROM t3;
...
4) We do an all-AMPs RETRIEVE step from 27 column partitions
   (20 contexts) of PLS.t3 using CP merge Spool 2 by way of an 
   all-rows scan with no residual conditions into Spool 1 (all_amps),
   which is spooled locally on the AMPs. The size of Spool 1 
   is estimated with low confidence to be 2 rows (614 bytes).
   The estimated time for this step is 0.01 seconds.
5) We do an all-AMPs MERGE into 26 column partitions (20 contexts) of 
   PLS.t1 from Spool 1 (Last Use). The size is estimated with no
   confidence to be 2 rows. The estimated time for this step is 0.71
   seconds.
5) We spoil the parser's dictionary cache for the table.
...

この例に新しいEXPLAINテキスト用語はありません。

VALUES句からの列データの挿入

この例では、単一の行をVALUESで列パーティション化されたテーブルPLS.t1に挿入する場合のEXPLAINテキストの一部を示します。複数列パーティションのコンテキストは、このINSERTリクエストには必要ないため、EXPLAINテキストでは列パーティションの数のみが明示されます。

EXPLAIN 
INSERT INTO t1 VALUES (1, 2,,,,,,,,,,,,,,,,,,,,,,,,);
1) First, we do an INSERT into 26 column partitions  of PLS.t1. 
   The estimated time for this step is 0.03 seconds.
...

この説明内の新しい用語は、次のように定義されます。

定義
INSERT into 26 column partitions of PLS.t1 1つの行が26個の列パーティションを持つPLS.t1に挿入されています。

USINGリクエスト修飾子からの列データの挿入

この例では、単一の行をUSINGリクエスト修飾子から取得した値で挿入する場合のEXPLAINテキストの一部を示します。VALUES句で明示的に指定されたデータではなく、VALUES句内のホスト変数またはパラメータを通じてUSINGリクエスト修飾子から得られるデータをPLS.t1に挿入する点を除くと、この例のEXPLAINテキストの説明は、前述の例のEXPLAINテキストの説明と同じになります。

EXPLAIN 
USING (a INTEGER, b INTEGER, c INTEGER, d INTEGER,
       e INTEGER, f INTEGER, g INTEGER, h INTEGER,
       i INTEGER, j INTEGER, k INTEGER, l INTEGER,
       m INTEGER, n INTEGER, o INTEGER, p INTEGER,
       q INTEGER, r INTEGER, s INTEGER, t INTEGER,
       u INTEGER, v INTEGER, w INTEGER, x INTEGER,
       y INTEGER, z INTEGER)
INSERT INTO t1 VALUES (:a, :b, :c, :d, :e, :f, :g, :h, :i,
                       :j, :k, :l, :m, :n, :o, :p, :q, :r,
                       :s, :t, :u, :v, :w, :x, :y, :z);
1) First, we do an INSERT into 26 column partitions of 
   PLS.t1. The estimated time for this step is 1.72 seconds....