呼び出し
通常は、クライアント ベースのデータベース問合わせ分析ツールを使用して呼び出されます。
INSERT EXPLAINの使用上のルール
- テーブルのリストを指定する場合で、SQL_statementによって参照されるテーブルが指定されたテーブルのリストに1つも含まれていない場合は、エラーが返されます。
- テーブルのリストを指定する場合で、SQL_statementによって参照されるすべてのテーブルが指定されたテーブルのリストに含まれていない場合は、エラーは返されませんが、一致しないテーブルは無視されます。
既存のQCDなしのINSERT EXPLAINのアクション
初めてINSERT EXPLAINを実行する前に、既存のQCD_nameデータベースが存在することを確認してください。Visual Explainツールのコントロール センター機能を使用して、QCDデータベースを作成します。詳細については、<Teradata® Visual Explainユーザー ガイド、B035-2504>を参照してください。
INSERT EXPLAINリクエストを実行するときに、QCD_nameデータベースまたはそのテーブルのいずれか1つでも存在しない場合、あるいは1つ以上のQCD_nameデータベース テーブルに対するINSERT権限がない場合は、適切なエラー メッセージが表示され、リクエストの実行が終了します。
WITH STATISTICSおよびFOR frequencyオプションを使用したインデックス分析ワークロードの作成
INSERT EXPLAINにWITH STATISTICSオプションを指定すると、サンプル テーブルのカーディナリティの見積もりおよび列統計が、QCDデータベースのTableStatisticsテーブルにキャプチャされます。最適化ルーチンにインデックス推奨事項がある保証は、QCDテーブルStatsRecsのLevel列に表現されます。StatsRecテーブルの詳細については、<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>のクエリー キャプチャ機能の説明を参照してください。この情報は、Teradata Index Wizardによって実行されるインデックス推奨事項分析にとって重要です。
WITH STATISTICS句を使用してキャプチャされたサンプル統計は、COLLECT STATISTICS (QCD形式)リクエストおよびCOLLECTリクエストを実行することでキャプチャされるものと同じです。詳細については、<Teradata Vantage™ SQLデータ定義言語 - 詳細トピック、B035-1184>の「COLLECT STATISTICS (最適化ルーチン形式)」を参照してください。
SQLリクエストが分析される回数を見積もるFOR frequency句は、通常は実行依頼されたワークロードの間に実行されます。この情報はTeradata Index Wizardユーティリティによって使用され、さまざまな列をインデックスに組み込むことの益が判別されます。
INSERT EXPLAIN WITH STATISTICSを指定した場合の新しい統計の収集
INSERT EXPLAIN WITH STATISTICSは、table_nameのDBC.TVFieldsに候補インデックス列が存在しない場合にのみ、新しいサンプル統計を収集します。存在する場合は、サンプルに基づいているかどうかに関係なく、既存の統計がQCDにコピーされ、再収集されることはありません。これによって、非サンプル統計が利用可能であれば、インデックス分析プロセスでその統計が十分に活用されるようになります。
INSERT EXPLAINで実行されるアクション
- SQL_statementで指定されたSQL DMLリクエストにEXPLAINを実行して、最適化ルーチン空白ツリーを生成する。
- EXPLAINから最適化ルーチン空白ツリー出力をキャプチャする。
- ユーザーによって指定された問合わせキャプチャ データベースの適切なテーブルに出力を書き込む。
オプション | 説明 |
---|---|
USING SAMPLE | システムがテーブルの基数に基づいてサンプル サイズを選択するのではなく、指定されたサンプル サイズの統計を母集団から収集します。 |
CHECK STATISTICS | 収集を推奨する統計のセットを生成し、その推奨事項をStatsRec QCDテーブルに保管します。 |
IN XMLオプションを指定する場合、これらのオプションはどちらも指定できません。
Teradata Index Wizardユーティリティで使用する統計を収集する場合、INSERT EXPLAINは以下の動作を示されている順序で実行します。
- SQL_statement to generate an Optimizer white treeによって指定されたSQL DMLリクエストに対してEXPLAIN(EXPLAINリクエスト修飾子を参照)を実行する。
- EXPLAINから最適化ルーチン空白ツリー出力をキャプチャする。
- FOR SQL_request句で明示的に除外されたテーブルは除外して、table_nameによって参照されるテーブルのテーブル基数および列統計をキャプチャする。列は有力なインデックス候補と見なされます。
- FOR SQL_request句で指定されたとおり、識別されたワークロードの間にfrequencyが実行される回数をキャプチャする。
- ユーザーによって指定された問合わせキャプチャ データベースの適切なテーブルに出力を書き込む。
INSERT EXPLAINは、複文リクエスト内では無効
複文リクエストの一部としてINSERT EXPLAINリクエストを実行することはできませんが、複文リクエストにINSERT EXPLAINリクエストを実行することはできます。INSERT EXPLAINリクエストを含む複文リクエストを実行しようとすると、その複文リクエストでエラーが返されます。
次の例で示すINSERT EXPLAINリクエストは、複文リクエストで有効な文のように見えますが、実際には、このリクエストによってその後の複文リクエストのクエリー計画がキャプチャされます。つまり、このINSERT EXPLAINリクエストは、複文リクエストの一部ではないということです。結果として、このリクエストは他のINSERT EXPLAINと同様に扱われ、正常に完了します。
INSERT EXPLAIN INTO qcd SELECT * FROM d1.t1 ;SELECT * FROM d1.t1; *** Insert completed. One row added. *** Total elapsed time was 1 second.
INSERT EXPLAINの結果に対するデータ パーセル参照の効果
データ パーセルがINSERT EXPLAINリクエストとともに実行されると、計画がUSINGとCURRENT_DATEやDATE値、または両方の値を参照して生成されることがあります。これらの値が検査される場合、問合わせ計画によってこれらが示されます。
データ パーセルがINSERT EXPLAINリクエストとともに実行されない場合、結果の計画がUSING、CURRENT_DATEやDATE値を参照しないで生成されます。つまり定義による全般計画です。Visual Explain、Teradata System Emulation Tool、Teradata Index Wizardツールは、INSERT EXPLAINリクエストを使用して問合わせ計画の取得中に入力としてUSINGデータを受け付けません。ただし、リクエストがBTEQまたはTeradata SQL Assistantを使用して実行された場合は除きます。
Teradata Index Wizardは、最適なインデックス推奨事項を決定するワークロードのコストを見積もるために内部でワークロード問合わせの計画を生成します。ワークロードの問合わせによってUSINGリクエスト修飾子が指定される場合、計画はUSING値、CURRENT_DATE値、またはDATE値で検査されずに生成されます。これらの要因から、リクエスト キャッシュ参照は、結果のインデックスに影響を及ぼしません。ワークロード分析がUSING値と無関係である場合、この動作は正しく実行されます。
INSERT EXPLAIN出力のXMLドキュメントとしてのキャプチャ
INSERT EXPLAINのIN XMLオプションにより、XML出力を生成しないINSERT EXPLAINリクエストで作成されるクエリー計画の等価表現機能が提供されます。
IN XMLオプションを指定していない場合、処理に数分かかるINSERT EXPLAIN操作が、XMLファイルとして情報をキャプチャすると数秒で完了します。これは、INSERT EXPLAIN ... IN XMLリクエストでは、リクエストの出力全体を単一のXMLファイルの1つ以上の断片(1断片31,000バイト)として格納することによって、挿入操作を1回のみ実行するためです。INSERT EXPLAINでQCDテーブルXMLQCDにXMLデータを挿入すると、QCDテーブルSeqNumberも更新されるためです。ただし、SeqNumberの更新は問題になるほどの操作ではありません。
IN XMLオプションを指定すると、Teradata DatabaseはXMLQCDおよびSeqNumber以外のQCDテーブルを更新しません。これは、複数のQCDテーブルに挿入操作を行なう必要がある標準的なINSERT EXPLAINリクエストとは異なります。
単一のQCDテーブルで、XMLQCDは標準的なINSERT EXPLAIN QCDデータ収集操作を大幅に上回るパフォーマンスを発揮します。XMLQCDテーブルの定義については、<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。
BEGIN QUERY LOGGING文とREPLACE QUERY LOGGING文の同様のオプションを指定すると、単一のDBQLテーブル(DBC.DBQLXMLTbl)に保管できるコンパクトなXMLバージョンのQCD情報が作成されるので、機能を相互補完できます。
- これら2つの方法には、生成される文書の内容の違い以外に、問合わせの実行に関する重要な違いがあります。
BEGIN QUERY LOGGING … XMLPLAN | INSERT EXPLAINの説明 |
---|---|
実行されたクエリーの、クエリー計画をログに記録します。 | 問合わせを実行なしで、問合わせ計画をキャプチャします。 |
XMLPLANロギングは、実行中のワークロードに対する問合わせ計画を記録しようと考えていて、INSERT EXPLAINを使用してそのワークロードの問合わせ計画をキャプチャするには遅すぎると考えている場合には理想的です。
クエリーを調整しているだけで、そのクエリーを実行するつもりがないときには、リクエストのクエリー計画をキャプチャするためのXMLPLANロギングは、INSERT EXPLAINリクエストを使用する場合ほど便利なものではありません。
- 従来のDBQLテーブルからの実行時の情報は、ログ記録計画でもキャプチャできます。
- XMLPLANロギングは、問合わせキャプチャ機能に対する拡張というよりも、問合わせロギングの拡張といえます。