テンポラリテーブルはテンポラリファイルに格納されます。他の DB 領域のページと同様に、テンポラリファイルのページはキャッシュできます。テンポラリテーブルに対する操作はトランザクションログに書き込まれません。テンポラリテーブルには「ローカルテンポラリ」テーブルと「グローバルテンポラリ」テーブルの 2 種類があります。
ローカルテンポラリテーブル ローカルテンポラリテーブルは、接続の間だけ、または複合文内で定義されている場合はその複合文が使われている間だけしか存在しません。
同じスコープ内にある 2 つのローカルテンポラリテーブルは、同じ名前にはできません。ベーステーブルと同じ名前のテンポラリテーブルを作成すると、ローカルテンポラリテーブルのスコープが終了した時点で、そのベーステーブルは、その接続内でのみ参照できるようになります。接続では、既存のテンポラリテーブルと同じ名前のベーステーブルは作成できません。
ローカルテンポラリテーブルにインデックスを作成するときに、auto_commit_on_create_local_temp_index オプションを OFF に設定すると、テーブルにインデックスを作成する前にコミットはされません。
グローバルテンポラリテーブル グローバルテンポラリテーブルは、DROP TABLE 文を使用して明示的に削除しないかぎり、データベース内に残ります。同じアプリケーションまたは異なるアプリケーションからの複数の接続は、グローバルテンポラリテーブルを同時に使用できます。グローバルテンポラリテーブルの特性は次のとおりです。
テーブルの定義はカタログに記録され、テーブルが明示的に削除されるまで保持される。
テーブルでの挿入、更新、削除は、トランザクションログに記録されない。
テーブルのカラム統計は、データベースサーバによってメモリ内に保持される。
グローバルテンポラリテーブルには「「非共有」」と「「共有」」の 2 種類があります。. 通常、グローバルテンポラリテーブルは非共有です。つまり、各接続はテーブル内で各自のローしか認識しません。接続が終了すると、その接続のローはテーブルから削除されます。
グローバルテンポラリテーブルが共有されると、テーブルのすべてのデータがすべての接続で共有されます。共有されたグローバルテンポラリテーブルを作成するには、テーブルの作成時に SHARE BY ALL 句を指定します。共有されたグローバルテンポラリテーブルには、グローバルテンポラリテーブルの一般的な特性だけでなく、次の特性が適用されます。
明示的に削除されるまで、またはデータベースが停止するまで、テーブルのコンテンツは持続する。
データベースの起動時、テーブルは空である。
テーブルでのローのロック処理動作は、ベーステーブルの場合と同じである。
非トランザクション指向のテンポラリテーブル テンポラリテーブルを非トランザクション指向として宣言するには、CREATE TABLE 文の NOT TRANSACTIONAL 句を使用します。状況によっては、NOT TRANSACTIONAL 句を使用するとパフォーマンスが向上します。これは、トランザクション単位でないテンポラリテーブルでの操作では、ロールバックログにエントリが作成されないためです。たとえば、テンポラリテーブルを使用するプロシージャが COMMIT や ROLLBACK の介入を受けずに繰り返し呼び出される場合や、テーブルに多くのローが含まれる場合は、NOT TRANSACTIONAL が有用です。非トランザクション指向テンポラリテーブルへの変更は、COMMIT または ROLLBACK の影響を受けません。
グローバルテンポラリテーブルの作成
プロシージャ内でのテンポラリテーブルの参照
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |