Hitachi

Hitachi Advanced Data Binder AP開発ガイド


5.10.3 作成される作業表の個数

SQL文の実行時に作成される作業表の個数を例を使って説明します。なお,ここで説明する作業表の数は,SQL文から想定される値です。実際にSQL文実行時に作成される作業表の数は,サーバ定義またはクライアント定義の最大SQL処理リアルスレッド数(adb_sql_exe_max_rthd_numオペランド),操作対象のデータ件数などに影響されます。

〈この項の構成〉

(1) 例1(ORDER BY句を指定している場合)

SQL文の例
SELECT "C1","C2","C3" FROM "T1" ORDER BY "C1" ASC
[説明]

ORDER BY句のソート処理で使う作業表が1つ作成されます。

(2) 例2(GROUP BY句を指定している場合)

SQL文の例
SELECT "C1","C2" FROM "T1" GROUP BY "C1","C2"
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    GROUP BY句の処理に使用する作業表が2つ作成されます。

  • グローバルハッシュグループ化が適用されない場合

    GROUP BY句の処理に使用する作業表が1つ作成されます。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

(3) 例3(SELECT DISTINCTを指定している場合)

SQL文の例
SELECT DISTINCT "C1","C2","C3" FROM "T1"
[説明]

適用されるSELECT DISTINCTの処理方式によって,作成される作業表の個数が異なります。

  • ハッシュ実行が適用される場合

    SELECT DISTINCTの処理に使用する作業表が2つ作成されます。

  • 作業表実行が適用される場合

    SELECT DISTINCTの処理に使用する作業表が1つ作成されます。

SELECT DISTINCTの処理方式については,「5.9 SELECT DISTINCTの処理方式」を参照してください。

(4) 例4(DISTINCT集合関数を指定している場合)

SQL文の例
SELECT COUNT(DISTINCT "C1") FROM "T1"
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    集合関数の処理に使用する作業表が2つ作成されます。

  • グローバルハッシュグループ化が適用されない場合

    集合関数の処理に使用する作業表が1つ作成されます。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

(5) 例5(ウィンドウ関数(RANK)を指定している場合)

SQL文の例
SELECT "C1",RANK() OVER (PARTITION BY "C2" ORDER BY "C3" ASC) FROM "T1"
[説明]

ウィンドウ関数(RANK)の処理で使う作業表が1つ作成されます。

(6) 例6(GROUP BY句とORDER BY句を指定している場合)

SQL文の例
SELECT "C1","C2" FROM "T1" GROUP BY "C1","C2" ORDER BY "C1" ASC
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    GROUP BY句の処理に使用する作業表が2つ,ORDER BY句の処理に使用する作業表が1つ,合計3つの作業表が作成されます。

  • グローバルハッシュグループ化が適用されない場合

    GROUP BY句の処理に使用する作業表が1つ作成されます。この例の場合,GROUP BY句とORDER BY句で必要なソート処理が1回で済むため,作成される作業表は1つになります。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

(7) 例7(GROUP BY句とORDER BY句を指定している場合)

SQL文の例
SELECT "C1","C2",COUNT(*) "DC1" FROM "T1"
     GROUP BY "C1","C2" ORDER BY "DC1" ASC
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    GROUP BY句の処理に使用する作業表が2つ,ORDER BY句の処理に使用する作業表が1つ,合計3つの作業表が作成されます。

  • グローバルハッシュグループ化が適用されない場合

    GROUP BY句の処理に使用する作業表が1つ,ORDER BY句の処理に使用する作業表が1つ,合計2つの作業表が作成されます。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

(8) 例8(SELECT DISTINCTとORDER BY句を指定している場合)

SQL文の例
SELECT DISTINCT "C1","C2","C3" FROM "T1" ORDER BY "C1" ASC
[説明]

SELECT DISTINCTのソート処理で使う作業表が1つ作成されます。

この例の場合,SELECT DISTINCTORDER BY句に必要なソート処理が1回で済むため,作成される作業表は1つになります。

(9) 例9(GROUP BY句とDISTINCT集合関数を指定している場合)

SQL文の例
SELECT "C1",COUNT(DISTINCT "C2") FROM "T1" GROUP BY "C1"
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    GROUP BY句の処理に使用する作業表が2つ,集合関数の処理に使用する作業表が1つ,合計3つの作業表が作成されます。

  • グローバルハッシュグループ化が適用されない場合

    GROUP BY句の処理に使用する作業表が1つ作成されます。この例の場合,GROUP BY句と集合関数で必要なソート処理が1回で済むため,作成される作業表は1つになります。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

(10) 例10(表を結合している場合)

SQL文の例
SELECT "T1"."C1","T1"."C2","T2"."C1","T2"."C2" FROM "T1","T2"
    WHERE "T1"."C1"="T2"."C1"
[説明]

結合処理で使用する作業表が3つ作成されます。

(11) 例11(FROM句に複数の表参照を指定している場合)

SQL文の例
SELECT "DT1"."C1","DT2"."C1"
  FROM (SELECT COUNT("T1"."C1") FROM "T1") AS "DT1"("C1"),
       (SELECT COUNT("T2"."C1") FROM "T2") AS "DT2"("C1")
  WHERE "DT1"."C1">"DT2"."C1"
[説明]

表の結合処理で使う作業表が1つ作成されます。

(12) 例12(副問合せを指定している場合)

SQL文の例
SELECT "T1"."C1","T1"."C2","T1"."C3" FROM "T1"
    WHERE "T1"."C1"=(SELECT "T2"."C1" FROM "T2"
                        WHERE "T2"."C2"="T1"."C2")
[説明]

副問合せの処理方式にハッシュ実行が適用されるかどうかによって,作成される作業表の個数が異なります。

  • ハッシュ実行が適用される場合

    外への参照列を含む副問合せの処理で使う作業表が3つ作成されます。

  • ハッシュ実行が適用されない場合

    外への参照列を含む副問合せの処理で使う作業表は作成されません。

副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。

(13) 例13(IN 副問合せを指定している場合)

SQL文の例
SELECT "C1","C2","C3" FROM "T1" WHERE "C1" IN (SELECT "C1" FROM "T2")
[説明]

副問合せの処理方式にハッシュ実行が適用されるかどうかによって,作成される作業表の個数が異なります。

  • ハッシュ実行が適用される場合

    IN述語に指定した副問合せの処理で使う作業表が3つ作成されます。

  • ハッシュ実行が適用されない場合

    IN述語に指定した副問合せの処理で使う作業表が1つ作成されます。

副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。

(14) 例14(限定述語を指定している場合)

SQL文の例
SELECT "C1","C2","C3" FROM "T1" WHERE "C1"=ANY(SELECT "C1" FROM "T2")
[説明]

副問合せの処理方式にハッシュ実行が適用されるかどうかによって,作成される作業表の個数が異なります。

  • ハッシュ実行が適用される場合

    限定述語に指定した副問合せの処理で使う作業表が3つ作成されます。

  • ハッシュ実行が適用されない場合

    限定述語に指定した副問合せの処理で使う作業表が1つ作成されます。

副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。

(15) 例15(EXISTS 述語を指定している場合)

SQL文の例
SELECT "T1"."C1","T1"."C2","T1"."C3" FROM "T1"
    WHERE EXISTS(SELECT * FROM "T2" WHERE "T2"."C2"="T1"."C2")
[説明]

副問合せの処理方式にハッシュ実行が適用されるかどうかによって,作成される作業表の個数が異なります。

  • ハッシュ実行が適用される場合

    EXISTS述語に指定した副問合せの処理で使う作業表が3つ作成されます。

  • ハッシュ実行が適用されない場合

    EXISTS述語に指定した副問合せの処理で使う作業表は作成されません。

副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。

(16) 例16(表関数導出表を指定している場合)

SQL文の例
SELECT "C1","C2","C3"
    FROM TABLE(ADB_CSVREAD(MULTISET (SELECT "FNAME" FROM "TFILE"),
                          'COMPRESSION_FORMAT=GZIP;
                           FIELD_NUM=1,2,3;'))
           AS "T1"("C1" INTEGER,"C2" CHAR(10),"C3" DATE)
[説明]

マルチ集合値式に指定した表副問合せの結果を保持するための作業表が1つ作成されます。マルチ集合値式については,マニュアルHADB SQLリファレンスマルチ集合値式の指定形式および規則を参照してください。

(17) 例17(ビュー表を指定している場合)

SQL文の例
CREATE VIEW "VT1"("C1","C2")
    AS SELECT "T1"."C1","T2"."C1" FROM "T1","T2"
          WHERE "T1"."C2"<="T2"."C2"
SELECT * FROM "VT1" AS "XT1","VT1" AS "XT2"
    WHERE "XT1"."C1">"XT2"."C1"
[説明]

ビュー表の処理で使う作業表が1つ作成されます。

(18) 例18(WITH句を指定している場合)

SQL文の例
WITH "QT1"("C1","C2") AS (SELECT "T1"."C1","T2"."C1" FROM "T1","T2" 
                              WHERE "T1"."C2"<="T2"."C2")
SELECT * FROM "QT1" WHERE "C1"=(SELECT MAX("C1") FROM "QT1")
[説明]

WITH句の処理で使う作業表が1つ作成されます。

(19) 例19(集合演算を指定している場合)

SQL文の例
SELECT "C1","C2" FROM "T1" UNION SELECT "C1","C2" FROM "T2"
[説明]

集合演算の処理で使う作業表が2つ作成されます。

(20) 例20(再帰的問合せを指定している場合)

SQL文の例
WITH "QT1"("C1","C2")
  AS (SELECT "C1","C2" FROM "T1" WHERE "C2" BETWEEN 'AA' AND 'EE'
      UNION ALL 
      SELECT "C1"+1,"C2" FROM "QT1" WHERE "C1"<=10)
SELECT * FROM "QT1"
[説明]

再帰的問合せでは,アンカーメンバの結果と再帰的メンバの結果を保持するため,再帰的問合せの処理で使う作業表が2つ作成されます。再帰的問合せについては,マニュアルHADB SQLリファレンス問合せ式を参照してください。

(21) 例21(DISTINCT集合関数とGROUP BY句を指定している場合)

SQL文の例
SELECT "C1",COUNT(DISTINCT "C2"),SUM("C3") FROM "T1"
    GROUP BY "C1"
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    GROUP BY句の処理に使用する作業表が2つ,集合関数の処理に使用する作業表が2つ,合計4つの作業表が作成されます。

  • グローバルハッシュグループ化が適用されない場合

    GROUP BY句の処理に使用する作業表が1つ作成されます。この例の場合,GROUP BY句のソート処理と集合関数のソート処理が同時に実行されるため,集合関数の処理に使用する作業表は作成されません。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

(22) 例22(複数のDISTINCT集合関数を指定している場合)

SQL文の例
SELECT COUNT(DISTINCT "C1"),COUNT(DISTINCT "C2") FROM "T1"
[説明]

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって,作成される作業表の個数が異なります。

  • グローバルハッシュグループ化が適用される場合

    集合関数の処理に使用する作業表が3つ作成されます。

  • グローバルハッシュグループ化が適用されない場合

    集合関数の処理に使用する作業表が2つ作成されます。

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。