問合わせのパフォーマンスを高めるには、テンポラル テーブルの行をパーティション化する必要があります。パーティション化すると、テーブルの行を現在行、履歴行、オープン行、およびクローズ行に論理的にグループ化できます。二重テンポラル テーブルの場合、現在行とオープン行に対する問合わせは、これらの行を含むパーティションに自動的に送信されます。
テンポラル テーブルに列パーティション化を適用することもできますが、ここで説明する行パーティション化が、テンポラル テーブルに使用されるパーティション化のタイプの1つとして必ず構成される必要があります。
例: ANSI valid-timeテーブルの行パーティション化
valid-timeテーブルを行パーティション化するには、次のPARTITION BY句を使用します。
CREATE MULTISET TABLE employee_bitemp ( eid INTEGER NOT NULL, ename VARCHAR(5), deptno INTEGER NOT NULL, terms VARCHAR(5), job_start DATE NOT NULL, job_end DATE NOT NULL, PERIOD FOR job_dur (job_start,job_end) AS VALIDTIME, sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW START, sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME(sys_start,sys_end) ) PRIMARY INDEX (eid) PARTITION BY CASE_N ( (END(job_dur) >= CURRENT_DATE AT INTERVAL -'12:59' HOUR TO MINUTE) AND END(SYSTEM_TIME) >= CURRENT_TIMESTAMP, END(job_dur) < CURRENT_DATE AT INTERVAL -'12:59' HOUR TO MINUTE AND END(SYSTEM_TIME) >= CURRENT_TIMESTAMP, END(SYSTEM_TIME) < CURRENT_TIMESTAMP ) WITH SYSTEM VERSIONING;
注意
- パーティション式にはsys_endの代わりにEND(SYSTEM_TIME)、job_endの代わりにEND(job_dur)を使用できます。
- WITH SYSTEM VERSIONINGはCREATE TABLE文の最後の句として使用する必要があります。
現在パーティションの保守
時間の経過とともに現在行は履歴行になるので、ALTER TABLE TO CURRENT文を定期的に使用して、現在パーティションの履歴行を履歴パーティションに移動する必要があります。ALTER TABLE TO CURRENTではパーティション式を再度解決します。これにより、各行は最新のパーティション式でそれぞれに適したパーティションに移動されます。以下に例を示します。
ALTER TABLE temporal_table_name TO CURRENT;
この文では、表に定義されたプライマリキーと固有性制約のために自動的に作成される、システム定義の結合インデックスも更新します。