例 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

例: INSERT EXPLAIN

以下の例では、例外はありますが、INSERT EXPLAINのさまざまな構文オプションを使用することで結果がどのように異なるかを示すために同じSELECTリクエストを使用しています。

各INSERT EXPLAINリクエストは、問合わせ計画のデータを挿入します。この計画は、指定QCDデータベースに直接変更するSELECTリクエストの最適化ルーチンで生成されます(QCDテーブルのマニュアルについては、<Teradata Vantage™ SQLデータ定義言語 - 詳細トピック、B035-1184>の「Query Capture Facility(問合わせ獲得機能)」を参照)。

例: クエリー計画名が指定され、QCD名がTLE_Queriesの場合

このINSERT EXPLAINリクエストの出力は、EmployeeSmithQueryデータベースの中でTLE_Queriesという問合わせ計画名で参照されます。このリクエストでは、システムは統計もデモグラフィックも収集しません。

     INSERT EXPLAIN
     INTO TLE_Queries AS EmployeeSmithQuery
     SELECT emp_id, emp_address
     FROM employee
     WHERE emp_name = 'Smith';

例: クエリー計画が指定されないためTLE_Queries QCD内の名前がNULL

このINSERT EXPLAINリクエストの出力は、問合わせ計画名を付ける句がないので、TLE_Queriesデータベースの中で問合わせ計画名がnullになります。このリクエストでは、システムは統計もデモグラフィックも収集しません。

     INSERT EXPLAIN
     INTO TLE_Queries
     SELECT emp_id, emp_address
     FROM employee
     WHERE emp_name = 'Smith';

例: クエリー計画名が指定され、QCD名がQCDの場合

このINSERT EXPLAINリクエストの出力は、QCDデータベースの中でQCDという問合わせ計画名で参照されます。このリクエストでは、システムは統計もデモグラフィックも収集しません。

     INSERT EXPLAIN
     INTO QCD AS "Employee Smith Query"
     SELECT emp_id, emp_address
     FROM employee
     WHERE emp_name = 'Smith';

例: ワークロード実行頻度句の指定

このINSERT EXPLAINリクエストの出力は、Wizard_QCDデータベースの中でWizard_QCDという問合わせ計画名で参照されます。統計はtable_1に対して収集され、列統計は、column_2column_3table_1に対して収集されます。指定SQL SELECTリクエストのパフォーマンスの頻度は、ワークロードあたり10回です。デモグラフィックは収集されません。

     INSERT EXPLAIN WITH STATISTICS FOR table_1
     INTO Wizard_QCD AS "Wizard Test" FOR 10
     SELECT * 
     FROM table_1 
     WHERE table_1.column_2 = 10 
     AND table_1.column_3 = 20 
     FOR 10;

例: 2つのテーブルが選択された場合の単一テーブルの統計

このINSERT EXPLAINリクエストの出力は、WizardTest2データベースの中でWizard_QCDという問合わせ計画名で保存されます。employeeテーブルの統計が収集され、emp_lastname列の列統計が収集されます。このリクエストでは、FOR table_name句でemployeeテーブルにだけについて統計を収集することを指定しているので、employeeテーブルでは統計のキャプチャは行なわれません。

     INSERT EXPLAIN WITH STATISTICS FOR employee
     INTO Wizard_QCD AS WizardTest2
     SELECT employee.first_name, department.dept_num
     FROM employee, department
     WHERE employee.emp_lastname = 'Smith'
     AND   department.dept_name IN ('Engineering', 'Support');

例: SQLクエリーがテーブル リストで名前が付けられたテーブルを参照しない

このINSERT EXPLAINリクエストは、テーブルのリストで指定されたテーブルが指定された問合わせで1つも参照されていないため、エラーを返します。

     INSERT EXPLAIN WITH STATISTICS FOR employee1
     INTO Wizard_QCD AS WizardTest2
     SELECT employee.first_name, department.dept_num
     FROM employee, department
     WHERE employee.emp_lastname = 'Smith'
     AND department.dept_name IN ('Engineering', 'Support');

    ****Failure 5644: No match found for specified tables in the request.

例: 統計サンプリングの指定

この例では、80という明示的なサンプリング パーセンテージを使用して、指定SELECTリクエストのQCD統計をキャプチャします。

     INSERT EXPLAIN WITH STATISTICS
     USING SAMPLE 80 PERCENT
     INTO MyQCD AS query1
     SELECT t2.y3, t1.x3  
     FROM t1, t2
     WHERE  t1.pi = t2.y2;

例: 単一列統計の生成

単一列統計推奨事項は、StatsRecsテーブル内の単一行で表わされます。この例には、列a1のプライマリ インデックスに関するものとインデックスのない列c1に関するものの、2つの別個の推奨事項があります。

このリクエストを実行後、StatsDDLデータベースのStatsRecテーブルのQCD列にシステムが保管した2つのCOLLECT STATISTICSリクエストを実行することにより、生成された統計収集のための推奨事項を適用することができます。

分析されるSQLリクエストが参照する唯一のテーブルの定義は以下のとおりです。

     CREATE TABLE t1 (
       a1 INTEGER,
       b1 INTEGER,
       c1 INTEGER);

次のINSERT EXPLAINリクエストは、SQLリクエストSELECT * FROM t1 WHERE c1=5のための単一列統計推奨事項を生成します。

     INSERT EXPLAIN INTO QCD
     CHECK STATISTICS
     SELECT * FROM t1 WHERE c1 = 5;

次のSELECTリクエストはQueryID 1の統計推奨事項を含むすべての列を選択します。このQueryIDというのは推奨を保持するQCD StatsRecsテーブル内の行セットにシステムが割り当てた固有識別子です。

     SELECT *
     FROM QCD.StatsRecs
     WHERE QueryID = 1
     ORDER BY StatsID;

この問合わせは以下のレポートを返します。

     QueryID           1
     StatsID           0
DatabaseName D1
   TableName t1
     FieldID        1025
   FieldName A1
      Weight           3
    StatsDDL COLLECT STATISTICS D1.t1 COLUMN A1 ;
     QueryID           1
     StatsID           1
DatabaseName D1
   TableName t1
     FieldID        1027
   FieldName C1
      Weight           3
StatsDDL COLLECT STATISTICS D1.t1 COLUMN C1 ;

例: 複数列統計の生成

複数列統計推奨事項は、StatsRecsテーブル内の複数列で表わされます。推奨事項の各列は別個の行に保管され、セット内の他の列とStatsID値を共有し、それぞれが独自の行によって表わされます。

COLLECT STATISTICSリクエストのテキストが、最も小さいFieldID値に対応する行にどのように保管されているかに注目してください。他の行のStatsDDL値はnullです。この例では、複数列プライマリ インデックスのために1つの推奨事項があります。

このリクエストを実行後、QCDデータベースのStatsDDLテーブルのStatsRec列にシステムが保管したCOLLECT STATISTICSリクエストを実行することにより、生成された統計収集のための推奨事項を適用することができます。

分析されるSQLリクエストが参照する唯一のテーブルの定義は以下のとおりです。

     CREATE TABLE t2 (
       a2 INTEGER,
       b2 INTEGER,
       c2 INTEGER,
       d2 INTEGER)
     PRIMARY INDEX (a2, b2, c2);

次のINSERT EXPLAINリクエストは、SQLリクエストSELECT * FROM t2のための複数列統計推奨事項を生成します。

     INSERT EXPLAIN INTO QCD
     CHECK STATISTICS
     SELECT * FROM t2;

次のSELECTリクエストはQueryID 2の統計推奨事項を含むすべての列を選択します。このQueryIDというのは推奨を保持するQCD StatsRecsテーブル内の行セットにシステムが割当てた固有の識別子です。

     SELECT *
     FROM QCD.StatsRecs
     WHERE QueryID = 2
     ORDER BY StatsID, FieldID;

この問合わせは以下のレポートを返します。

     QueryID           2
     StatsID           0
DatabaseName D1
   TableName t2
     FieldID        1025
   FieldName A2
      Weight           3
    StatsDDL COLLECT STATISTICS D1.t2 COLUMN (A2 ,B2 ,C2 ) ;
     QueryID           2
     StatsID           0
DatabaseName D1
   TableName t2
     FieldID        1026
   FieldName B2
      Weight           3
    StatsDDL ?
     QueryID           2
     StatsID           0
DatabaseName D1
   TableName t2
     FieldID        1027
   FieldName C2
      Weight           3
    StatsDDL ?

レポートには、次の3つの行があります。テーブルのプライマリ インデックスを形成する各列に1つずつ、合計3つの行があります。3つの行がすべて同じQueryId値(2)と同じStatsID値(0)を共有しているので、これが複数列統計だと分かります。複数列統計であることを見分けるもう1つの点は、DDLテキストの列が1つだけで、それがFieldID値が一番小さい(1025)行に保管されているということです。

例: XML文書としての出力データのキャプチャ

この例では、問合わせキャプチャ出力の1行を生成し、それをXML形式でQCDテーブルmyqcd.XMLQCDに保管します。

     INSERT EXPLAIN INTO myqcd IN XML
     SELECT *
     FROM DBC.DBCInfoV;

次に示す出力は、myqcd.XMLQCDテーブルに挿入された行の断片です。

             Id            1
           Kind            Q
            Seq            1
         Length         4501
           Text  <?xml version="1.0" encoding="UTF-8"?><QCF>
<ElapsedSeconds>0.030<ElapsedSeconds><QueryID>8<QueryID>
<User_Database><UDB_Key>1</UDB_Key><UDB_ID>256</UDB_ID>
<MachineName>localhost</MachineName><UDB_Name>DBC</UDB_Name>
</User_Database><Query><UDB_Key>1</UDB_Key><MachName>localhost
</MachName><NumAMPs>2</NumAMPs><NumPEs>1<NumPEs><NumNodes>1
<NumNodes><ReleaseInfo>13w.00.00.00</ReleaseInfo><VersionInfo>
13w.00.00.00</VersionInfo>…

例: 関連するDDLテキストのないXML文書としての出力データのキャプチャ

この例では、問合わせキャプチャ出力の1行を生成し、それをXML形式でQCDテーブルmyqcd.XMLQCDに保管します。NODDLTEXTオプションを指定しているため、システムによってリクエストに関連するDDL SQLテキストが保管されることはありません。

     INSERT EXPLAIN INTO myqcd IN XML NODDLTEXT
     SELECT *
     FROM DBC.DBCInfoV;