11

GLOBAL TEMPORARY TABLEDB2 でを作成しています。そして私がサーフィンをしたとき、私は作成する2つの方法を手に入れました 1.宣言 2.作成。

1. DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_EMP
      (EMPNO  CHAR(6) NOT NULL,
       SALARY DECIMAL(9, 2),
       BONUS  DECIMAL(9, 2),
       COMM   DECIMAL(9, 2)) WITH REPLACE ON COMMIT PRESERVE ROWS ;

2. CREATE GLOBAL TEMPORARY TABLE TMPDEPT
      (TMPDEPTNO   CHAR(3)      NOT NULL,
       TMPDEPTNAME VARCHAR(36)  NOT NULL,
       TMPMGRNO    CHAR(6),
       TMPLOCATION CHAR(16) ) ON COMMIT PRESERVE ROWS ;

また、IBM サイトから、create は永続的であるため、すべてのユーザー セッションが起動時に宣言しなくても同じテーブル定義にアクセスでき、さらに多くの利点があるため、create が最適であるという情報を入手しました。

リンク: http://www.ibm.com/developerworks/data/library/techarticle/dm-0912globaltemptable/

そして、宣言よりも作成を使用するクエリはほとんどありませんでした:

  1. Replaceの使用中にキーワードが見つかりませんでしたCREATE GLOBAL TEMPORARY TABLE

  2. 接続を開いてストアド プロシージャを実行し、
    そのストアド プロシージャ内でグローバル一時テーブルを作成し、そのストアド プロシージャ内で別のストアド プロシージャを呼び出しているシナリオを考えてみsameましょう。 . 両方のテーブル名が同じで、単一の接続内にあるため、エラーがスローされますか?

  3. セッションがあると宣言し、セッションを作成しない?? これは持続性に関連していますか??

  4. パフォーマンスに関しては、どちらが優れていますか? temp を宣言するか、temp を作成しますか?

  5. 宣言/作成の最適な使用法について、いくつかのシナリオを提案してください!!

4

3 に答える 3

9

Craig S. Mullinsの優れた記事で、この 2 つの主な違いについて説明しています。ほとんどの場合、それらは同じように機能します。

作成された一時テーブルDSNDB07は、作業用ファイル データベース (作業用ストレージを必要とする SQL ステートメントで使用される同じストレージ領域) に作成されます。宣言された一時テーブルは、作成する必要がある一時テーブルスペースに格納されます。

CTT にはいくつかの短所があります。

  • これらは永続的ではないため、ロック、ロギング、リカバリなどの一般的なデータベース操作の一部は、作成された一時テーブルには適用されません。

  • 作成された一時テーブルにはインデックスを作成できないため、すべてのアクセスは完全なテーブル スキャンによって行われます。

  • 作成済みの一時テーブルに制約を作成することはできません。

  • NULL は、作成された一時テーブルの列に許可される唯一のデフォルト値です。

  • 作成された一時テーブルは、DB2 ユーティリティで参照できません。

  • 作成済みの一時表は、UPDATE ステートメントの対象として指定できません。

  • 作成した一時テーブルから削除する場合、すべての行を削除する必要があります。

  • 作成された一時テーブルにビューを作成することはできますが、WITH CHECK OPTION は指定できません。

通常、DTT はより柔軟です。

  • 宣言された一時テーブルには、インデックスと CHECK 制約を定義できます。

  • 宣言済み一時表に対して UPDATE ステートメントおよび位置指定 DELETE ステートメントを発行できます。

  • 宣言済み一時表の列を暗黙的に定義し、SELECT からの結果表を使用できます。

番号付きの質問については、次のとおりです。

1. & 2. ありません。CTT は一度 (DBA によって) 宣言されると、アプリケーション プログラマーはそれを任意のセッションで使用できると私は信じています (これが正確かどうかは 100% 確信が持てません。私たちのショップではほとんどすべての場合に DTT を使用しています)。各接続には独自のコピーがあり、アプリケーションが切断されると、そのセッションのその CTT に保存されたデータはなくなります。

3.SESSIONは、DTT の単なるスキーマ識別子です。永続化されていない一時テーブルであることを示しています。

4. どちらもほぼ同じ性能になると思います。ロック、ロギング、リカバリなどが適用されないため、通常のテーブルよりも高速になります。

5. 一般的に、私は DTT が進むべき道だと思いますが、CTT は便利です (Craig が彼の記事で述べているように)。

(CTT) は、主に、一時データの更新が不要で、一時データへのアクセスが純粋にシーケンシャルである場合に考慮する必要があります。

于 2013-03-29T13:57:16.300 に答える