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