2009-09-04 8 views
0

レポートを生成するために数百万のレコードを取得し、ライブ・テーブルのレポートを実行するのではなく、私のインデックスを作成し、それをさらにデータ抽出に使用します。Oracle - グローバル・テンポまたはグローバル・テンポではない

キャッシュされたテーブルは、データがメモリに格納されるにつれてより速く/より速く見える傾向があることは知っていますが、物理的なテンポラリテーブルを使用するインスタンスが存在するかどうかを知りたいのです。より大量のデータを扱う場合、どんなシナリオが他のシナリオより優れているでしょうか?

答えて

0

一時テーブルは、作成したセッションでしかデータを見ることができないため、並行処理の問題を心配する必要はありません。

非一時テーブルでは、セッションを区別するためにセッションハンドル/識別子をテーブルに追加する必要があります。

1

私はテンポラリテーブルを考える前にサブクエリファクタリングを使用します。さまざまな関数やプロシージャで再利用が必要な場合は、ビューに戻します(返されるデータに応じてマテリアライズドビューに変わる可能性があります)。 asktomによると

:Oracleで

...temp table and global temp table are synonymous in Oracle. 
2

グローバル・テンポラリ・テーブルは、SQL Serverの一時テーブルのようではありません。それらはメモリーにキャッシュされず、一時表領域に書き込まれます。

大量のデータを処理していて、妥当な時間(それは追加のインデックスを作成したいと思われる)の場合は、通常のテーブルを使用する必要があります。シナリオに単一のセッション、おそらくバックグラウンドジョブがあり、データを操作している場合は、これがさらにそうです。

+0

なぜですか?グローバルな一時表の索引は、通常の表の索引よりも低速ですか。 – tuinstoel

+0

私が知っているわけではありません。索引を作成する必要性が比較的長い保持期間を示唆しているに過ぎません。そうであれば、通常のテーブルはGTTより優れています。 – APC

0

オラクルの通常(ヒープ)テーブルとグローバルな一時テーブルの主な違いは、彼らの可視性と変動性である:行は、彼らが他のセッションに表示され、削除されるまで保持され、通常の表にコミットされたら

グローバルtempテーブルの行は、他のセッションでは表示されず、セッションが終了しても保持されません。

したがって、パフォーマンスは重要ではないと言っているわけではなく、アプリケーションの設計が必要とするものを選択する必要があります。

0

Oracle一時表の内容は、データを作成したセッション内でのみ表示され、セッションが終了すると消えます。したがって、すべてのレポートのデータをコピーする必要があります。

このレポートは、一度の操作を行っていますか、またはレポートを定期的に実行していますか?レポートを実行するだけで大​​量のデータをコピーすることは、私にとっては良い解決策ではありません。なぜ元のデータでレポートを実行しないのですか?

元のテーブルを使用できない場合は、必要に応じて最新のデータを入手できるようにメートル法によるビューを作成することができます。

関連する問題