16.20 - 使用上の注意 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

EXPLAINおよびUSINGリクエスト修飾子

EXPLAINリクエスト修飾子とUSINGリクエスト修飾子の両方を同じリクエストに指定するときには、USING修飾子の前にEXPLAIN修飾子を指定する必要があります。USINGリクエスト修飾子を参照してください。USINGリクエスト修飾子が指定されたリクエストについては動的計画を表示できません。

XML形式によるEXPLAINテキスト出力のキャプチャ

IN XMLオプションにより、EXPLAINテキストが通常の英文テキストではなく、XMLテキストで返されます。IN XMLオプションによって作成されたXML出力に使用されている、XML計画の属性とXMLスキーマについては、<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。

EXPLAIN IN XMLリクエスト修飾子では、次に示す2つのいずれかの形式で出力を返すこともできます。
  • 対応するDDLテキストを含むXMLテキスト。 この形式を指定するには、IN XMLオプションを使用します。
  • 対応するDDLテキストを含まないXMLテキスト。 この形式を指定するには、IN XML NODDLTEXTオプションを使用します。

BEGIN QUERY LOGGING文とREPLACE QUERY LOGGING文の補完オプションを指定すると、DBQLテーブルに保管できるコンパクトなXMLバージョンの情報が作成されます。<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「BEGIN QUERY LOGGING」と「REPLACE QUERY LOGGING」を参照してください。

EXPLAINレポートの概要

EXPLAINは、最適化ルーチンが問合わせSQLリクエストについて生成するアクセスおよび結合計画のサマリーを提供します。リクエストを処理するためにインデックスが使用されるレポートの詳細では、生成される中間スプールを特定し、実行される結合タイプを示して、トランザクションのリクエストが並列でディスパッチされるかどうかなどを示します。

任意のSQLリクエストに対してEXPLAINを実行すると、このリクエストは解析および最適化され、最適化ルーチンによって生成される計画が、リクエストの計画ステップを説明するテキスト ファイル形式で要求元に返されます。EXPLAINレポートでは最適化ルーチンが決定した実行戦略を複製しますが、実行戦略が行なった選択の理由は説明しません。

EXPLAINは複雑な問合わせの評価、より効率的な処理戦略の開発に役立ちます。

EXPLAINでは、条件式の最初の255文字だけが表示されます。全体の条件式は単一引用符で囲まれています。

EXPLAIN出力でレポートされる時間は秒単位で表わされていますが、時間の単位は実際は任意です。 これらの数値を使用すると、同じ問合わせの他のコーディング式との間で相対パフォーマンスを比較できますが、クロック タイムとは相関しません。 時間と行の見積もりが手順で報告されないことがあります。

EXPLAINの結果を今後の参照のために保存します。

EXPLAINレポートで返されるオブジェクト名およびリテラル内の置換文字

EXPLAINレポートで返されるオブジェクト名またはリテラルが、セッション文字セットに存在しない文字を含んでいるか、または表記不能である場合、名前またはリテラルはUNICODEで区切られた識別子またはリテラルとして示されます。

表記不能な各文字は、同等の16進数にエスケープされます。

システムは、使用可能な場合、円記号(U+005C)をエスケープ文字として使用します。BACKSLASHを使用できない場合:
  • セッション文字セットでBACKSLASHがYEN SIGN (U+00A5)またはWON SIGN (U+20A9)によって置き換えられる場合は、置き換えられた文字がエスケープ文字として使用されます。
  • 前述の文字を使用できない場合は、NUMBER SIGN (U+0023)が使用されます。

セッション文字セットに変換可能だが、語彙的に名前として区別不可能なオブジェクト名は、二重引用符で囲まれます。

オブジェクト命名ルールの詳細については、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。

EXPLAINの表示の標準形式

EXPLAINリクエスト修飾子の標準的な出力では、次に示す文字定数列が表示されます。

定数の種類 書式
印刷可能な1文字の1バイト文字 Teradata Latin
その他。 内部Teradata 16進数

EXPLAINはSQLリクエストだけを処理する

有効なTeradata SQLリクエストはEXPLAINで修飾できます。

USINGリクエスト修飾子、WITH RECURSIVEビュー修飾子、またはほかのEXPLAIN修飾子をEXPLAINすることはできません。USINGリクエスト修飾子WITH修飾子を参照してください。個々の関数、プロシージャ、またはメソッドを説明することもできません。

Teradata Visual Explainユーティリティ

Teradata Visual Explainツールでは、最適化ルーチンの計画の図形的なディスプレイを提供し、さらに同じ結果を戻す問合わせの各計画を比較することができます。この機能によってEXPLAINレポートを簡単に解釈することができます。

Teradata Visual Explainの詳細については、<Teradata® Visual Explainユーザー ガイド、B035-2504>を参照してください。関連する情報は、<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>に掲載されています。

EXPLAINおよび埋め込みSQL

EXPLAINはリクエストを返すデータとともにのみ使用します。EXPLAINは、データ型がVARCHAR(80)の単一列の複数の行を返します。複数の行が返されるため、EXPLAINはカーソルを使用してのみ実行できます。

EXPLAINの静的実行については、<Teradata Vantage™ SQLストアド プロシージャおよび埋め込みSQL、B035-1148>を参照してください。そこで示されているquery_expression句の代わりにEXPLAINで修飾されたSQLリクエストを使用します。

EXPLAINリクエスト修飾子は動的に実行しないでください。そうしないと、結果は予測できません。

EXPLAINとプロシージャ

プロシージャをEXPLAINできません。

例えば、プロシージャupdate_ordersをコンパイルして、以下のEXPLAINを実行した場合は、update_ordersが有効なSQL文ではないため、エラーが発生します。

     EXPLAIN update_orders;

プロシージャの作成でEXPLAINを使用する必要があります。プロシージャ本体からSQLテキストを取り出し、個々の文をEXPLAINする必要があります。場合によっては、プロシージャのSQLテキストに変更が必要なことがあります。例えば、INTO句を除去したり、USINGリクエスト修飾子を追加して、プロシージャの変数およびパラメータを表わす必要があるかもしれません。

リクエスト キャッシュ参照のEXPLAINレポートに対する影響

リクエストでUSINGデータを指定する場合、またはDATEまたはCURRENT_DATE組み込み関数を指定する場合、もしくはその両方を指定する場合、リクエスト キャッシュ参照を起動することができます。<Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。この場合、EXPLAINテキストはピークされたリテラル値を示します。

USINGデータを指定しない場合、またはUSING変数、DATE値、またはCURRENT_DATE値が参照されない場合、もしくはその両方が参照されない場合、生成された計画と生成されたEXPLAINテキストのいずれにも影響はありません。

USINGリクエスト修飾子を使用しないで、CLIv2データ パーセル フレーバー3 (Data)またはCLIv2パーセル フレーバー71 (DataInfo)のいずれかを使用して指定された、パラメータ化されたリクエストは、次のリクエスト修飾子または文のいずれかを使用して説明できないことに注意してください。
  • EXPLAIN
  • DUMP EXPLAIN
  • INSERT EXPLAIN

データ パーセル形式の詳細については、<Teradata® CLI V2リファレンス-メインフレーム接続システム、B035-2417>または<Teradata® Call-Level Interface Version 2リファレンス - ワークステーション接続システム、B035-2418>を参照してください。

EXPLAINを使用した、ビューがアクセスするデータベース オブジェクトの特定

リクエストのEXPLAINでは、必ずしもそのリクエストがアクセスするすべての基礎データベース オブジェクトの名前が報告されるわけではありませんが、アクセスするすべての基本テーブルの名前は報告されます。

特定のビュー(入れ子のビューを含む)がアクセスするオブジェクトを特定するには、SHOW文を使用します。<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「SHOW」を参照してください。

例えば、次のリクエストは、view_nameがアクセスするすべての基礎となるテーブルとビューの作成テキストおよび格納しているデータベースを報告します。

     SHOW QUALIFIED SELECT *
     FROM view_name;

一方、次のリクエストは、view_nameがアクセスする基礎となるテーブルだけを報告し、アクセスされる入れ子のビューは報告されません。

     EXPLAIN SELECT *
     FROM view_name;

2PCセッション モード

2PCセッション モードで、EXPLAIN修飾子がリクエストとともに使用された場合、かつ、そのリクエストの後に2PC機能が続く場合には、リクエストのSQL部分は説明されますが、2PC機能は説明されません。

たとえば、次の複文リクエストが発行されると、INSERTとSELECTは説明されますが、VOTEは説明されません。ただし、VOTEはAMPへ送られます。

     EXPLAIN INSERT tab1(1,2)
            ;SELECT *
             FROM tab1
            ;VOTE

VOTEは、システム管理者によって指定されます。2PCモードでリクエストを実行するユーザーによって指定されることはありません。