1

次のような一時テーブルを使用して、複雑な Oracle ステートメントを最適化しました。

オリジナル:

SELECT data FROM table WHERE ..complex statement..;

最適化されています (< Oracle9i を扱っているため、WITH キーワードは使用できません) :

CREATE GLOBAL TEMPORARY TABLE temptab (x NUMBER, y DATE) ON COMMIT DELETE ROWS;
INSERT INTO temptab SELECT * FROM temp;
SELECT data FROM temptab WHERE ..complex statement..;
COMMIT;

問題は、これらのステートメントを新しいデータベースで実行する必要があることです。一時テーブルを削除して作成するか、存在する場合にのみ切り捨てる方が良いですか? この追加のテーブルをどのように処理できますか?

4

2 に答える 2

4

一時テーブルのデータは、トランザクションの範囲内でのみ表示されます。

トランザクションをコミットまたはロールバック (または切断して再接続) すると、データは消失します。

クエリを実行するたびにテーブルを作成する必要はありません。一度作成するだけです。

TRUNCATEinOracleDDL操作です (実行中のトランザクションをコミットします)。

于 2009-08-26T16:05:52.400 に答える
0

一時表はデータファイルのメモリーを消費しません。一時テーブルは、一時セグメントのメモリを割り当てます。セッションまたはトランザクションが終了すると、メモリは解放されます。

一時テーブルでの切り捨ては必要ありません。作成は一度で、それを使用します。悲しみはありません。

一時テーブルの詳細については、こちらをご覧ください。

于 2009-08-26T21:56:23.287 に答える