例: 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_2のcolumn_3とtable_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;