Hitachi

Hitachi Advanced Data Binder AP開発ガイド


5.12.3 JOIN(結合表)を指定した場合の留意事項

結合表を指定した場合,結合表の指定方法によっては,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。検索範囲の絞り込みが行われる結合表の指定方法について説明します。

例中のARCHIVE-T1はアーカイブマルチチャンク表を意味し,RECORD-DAYはアーカイブレンジ列を意味しています。

〈この項の構成〉

(1) 例1(LEFT OUTER JOINの場合)

LEFT OUTER JOINの右側の表参照にアーカイブマルチチャンク表を指定した場合,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。

■検索範囲の絞り込みが行われない例(変更前)
SELECT "T1"."C1" FROM "T1"
                 LEFT OUTER JOIN "ADBUSER01"."ARCHIVE-T1" AS "DT"
                 ON "T1"."C1" = "DT"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'
[説明]

下線部のように,LEFT OUTER JOINの右側の表参照にアーカイブマルチチャンク表を指定した場合,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。この場合,アーカイブされている全データに対しても検索処理が行われるため,検索処理時間が長くなることがあります。

この場合,次のようにSQL文を変更してください。

■検索範囲の絞り込みが行われる例(変更後)
SELECT "T1"."C1" FROM "T1"
                 LEFT OUTER JOIN (SELECT * FROM "ADBUSER01"."ARCHIVE-T1"
                                    WHERE "RECORD-DAY"
                                      BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
                                    AND "C1"='P001') AS "DT"
                 ON "T1"."C1" = "DT"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'
[説明]

下線部のように,アーカイブレンジ列を指定した探索条件を明示的に指定した導出表に書き換えます。上記のようにSQL文を変更すると,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

メモ

LEFT OUTER JOINの左側の表参照にアーカイブマルチチャンク表を指定する場合は,特に考慮することはありません(SQL文を変更する必要はありません)。

(2) 例2(RIGHT OUTER JOINの場合)

RIGHT OUTER JOINの左側の表参照にアーカイブマルチチャンク表を指定した場合,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。

■検索範囲の絞り込みが行われない例(変更前)
SELECT "T1"."C1" FROM "ADBUSER01"."ARCHIVE-T1" AS "DT"
                 RIGHT OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'
[説明]

下線部のようにRIGHT OUTER JOINの左側の表参照にアーカイブマルチチャンク表を指定した場合,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。この場合,アーカイブされている全データに対しても検索処理が行われるため,検索処理時間が長くなることがあります。

この場合,次のようにSQL文を変更してください。

■検索範囲の絞り込みが行われる例(変更後)
SELECT "T1"."C1" FROM (SELECT * FROM "ADBUSER01"."ARCHIVE-T1"
                         WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
                         AND "C1"='P001') AS "DT"
                 RIGHT OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'
[説明]

下線部のように,アーカイブレンジ列を指定した探索条件を明示的に指定した導出表に書き換えます。上記のようにSQL文を変更すると,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

メモ

RIGHT OUTER JOINの右側の表参照にアーカイブマルチチャンク表を指定する場合は,特に考慮することはありません(SQL文を変更する必要はありません)。

(3) 例3(FULL OUTER JOINの場合)

FULL OUTER JOINの左側または右側の表参照にアーカイブマルチチャンク表を指定した場合,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。

■検索範囲の絞り込みが行われない例(変更前)
SELECT "T1"."C1" FROM "ADBUSER01"."ARCHIVE-T1" AS "DT"
                 FULL OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'
[説明]

下線部のようにFULL OUTER JOINの左側または右側の表参照にアーカイブマルチチャンク表を指定した場合,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。この場合,アーカイブされている全データに対しても検索処理が行われるため,検索処理時間が長くなることがあります。

この場合,次のようにSQL文を変更してください。

■検索範囲の絞り込みが行われる例(変更後)
SELECT "T1"."C1" FROM (SELECT * FROM "ADBUSER01"."ARCHIVE-T1"
                         WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
                         AND "C1"='P001') AS "DT"
                 FULL OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'
[説明]

下線部のように,アーカイブレンジ列を指定した探索条件を明示的に指定した導出表に書き換えます。上記のようにSQL文を変更すると,アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。