3.3.17 一時表
一時表は,トランザクション又はSQLセッションの期間中だけ存在する実表です。トランザクションの期間中だけ存在する一時表をトランザクション固有一時表,SQLセッションの期間中だけ存在する一時表をSQLセッション固有一時表といいます。
一時表は,表定義時点では作成されません。一時表に対して,最初にINSERT文が実行されたときに表が作成されます。このことを,一時表の実体化といいます。
また,一時表は一つの表定義に対して接続(CONNECT文実行)ごとに専用の表が作成されるため,複数ユーザが同時に使用しても,ほかのユーザのデータ操作(参照,挿入,更新,又は削除)の影響を受けません。一時表及び一時表に定義したインデクス(一時インデクス)は,一時表用RDエリアに格納され,トランザクションの決着時又はSQLセッションの終了時に,自動的に削除されます。
一時表の概要を次の図に示します。
- 一時表の効果
-
-
トランザクション又はSQLセッションで複雑な処理を行う場合,中間処理結果を一時的に保持し,さらに加工して最終的な結果を得るなど,作業用の表として使用できます。
-
データ件数が多い表の一部のデータに対してトランザクション又はSQLセッション内で頻繁にアクセスする場合,該当するデータを一時表に格納することで入出力回数を削減でき,性能向上できます。
-
一時表は,トランザクションの決着時又はSQLセッションの終了時に自動的に削除されるため,UAPによる後処理が不要になり,UAP作成の負担が軽減できます。
-
- 一時表の適用基準
-
データ件数が多い表の一部にだけアクセスが頻繁にあるトランザクションや,
中間処理結果を一時的に保存する必要があるような複雑な処理をするバッチ業務などに一時表の使用をお勧めします。
一時表については,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
(1) 一時表のデータ有効期間
実体化された一時表のデータ有効期間(実体が存在する期間)は,その一時表がトランザクション固有一時表か,SQLセッション固有一時表かによって異なります。一時表のデータ有効期間の開始及び終了タイミングを次の表に示します。
一時表の種類 |
開始となるタイミング |
終了となるタイミング |
---|---|---|
トランザクション固有一時表 |
トランザクション中で,一時表に対して最初にINSERT文が実行されたとき |
トランザクションが決着したとき |
SQLセッション固有一時表 |
SQLセッション中で,一時表に対して最初にINSERT文が実行されたとき |
|
- 注意事項
-
一時表のデータ有効期間外に,一時表に対して検索,更新,及び削除を実行しても,データがない表に対してSQLを実行したときと同じ結果になります。
(2) 一時表及び一時インデクスの定義方法
(a) 一時表を定義する場合
定義系SQLのCREATE TABLEでGLOBAL TEMPORARYを指定します。トランザクション固有一時表を定義する場合はON COMMIT DELETE ROWSを,SQLセッション固有一時表を定義する場合はON COMMIT PRESERVE ROWSを指定します。なお,一時表の場合,指定できない,又は指定しても無視されるオペランドがあります。詳細については,マニュアル「HiRDB Version 9 SQLリファレンス」のCREATE TABLEを参照してください。
(b) 一時インデクスを定義する場合
基本的に,通常のインデクスの定義と同じです。一時インデクスも一時表と同様に,指定できない,又は指定しても無視されるオペランドがあります。詳細については,マニュアル「HiRDB Version 9 SQLリファレンス」のCREATE INDEXを参照してください。
(c) データを格納する一時表用RDエリアを指定する場合
クライアント環境定義PDTMPTBLRDAREAに使用する一時表用RDエリア名を指定します。複数のRDエリアを指定した場合や,この環境定義の指定を省略した場合,次の規則に従ってHiRDBがデータを格納する一時表用RDエリアを決定します。
-
PDTMPTBLRDAREAに複数のRDエリアを指定している場合
指定したRDエリアに特定SQLセッション占有属性とSQLセッション間共有属性の一時表用RDエリアが混在しているときは,特定SQLセッション占有属性の一時表用RDエリアを優先して使用します。
-
PDTMPTBLRDAREAの指定を省略している場合
SQLセッション間共有属性の一時表用RDエリアを使用します。
格納先RDエリアの決定規則については,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
(3) 一時表使用時の制限事項
(a) 運用コマンド又はユティリティ
次に示す運用コマンド又はユティリティは,一時表に対して実行できません。詳細は,マニュアル「HiRDB Version 9 コマンドリファレンス」を参照してください。
-
pdorbeginコマンド【UNIX版限定】
-
最適化情報収集ユティリティ(pdgetcst)
-
データベース作成ユティリティ(pdload)
-
グローバルバッファ常駐化ユティリティ(pdpgbfon)
-
空きページ解放ユティリティ(pdreclaim)
-
データベース再編成ユティリティ(pdrorg)
(b) SQL
次に示すSQLは,一時表又は一時インデクスを指定できないなどの制限があります。詳細は,マニュアル「HiRDB Version 9 SQLリファレンス」を参照してください。
-
定義系SQL
ALTER INDEX
ALTER TABLE
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
GRANT
REVOKE
-
操作系SQL
ALLOCATE CURSOR文
ASSIGN LIST文
DECLARE CURSOR文
動的SELECT文
SELECT文(表参照,問合せ式 形式2)
DELETE文
UPDATE文
-
制御系SQL
COMMIT文
DISCONNECT文
ROLLBACK文
LOCK TABLE文
SET SESSION AUTHORIZATION文