これを実行してパフォーマンスを維持する適切な方法には、物理テーブルの設計を変更する必要があります。
インジケータ列を保持する各テーブルに列を追加し、その列にチェック制約を追加できる場合、クエリで「パーティション」の除去を実現できます。
DDL:
create table table_a (
c1 ...
,c2 ...
,c3 ...
,table_ind char(1) not null generated always as 'A'
,constraint ck_table_ind check (table_ind = 'A')
);
create table table_b (
c1 ...
,c2 ...
,c3 ...
,table_ind char(1) not null generated always as 'B'
,constraint ck_table_ind check (table_ind = 'B')
);
create view v1 as (
select * from table_a
union all
select * from table_b
);
クエリを実行すると、DB2 オプティマイザはチェック制約を使用して述語に一致するselect c1,c2,c3 from v1 where table_ind = 'A'
行がないことを認識し、アクセス プランからテーブルを完全に除外します。table_b
table_ind = 'A'
これは、DB2 for Linux/UNIX/Windows が Range Partitioning をサポートする前に使用されていました (場合によっては現在も使用されています)。この手法の詳細については、2002 年に IBM DB2 開発者によって書かれたこの研究論文 [PDF]を参照してください。