概要
Oracleで用意されているテンポラリテーブル
CREATE GLOBAL TEMPORARY TABLE で作成
これを、一時計算領域として利用することは
セッション単位でロックや重複などを管理しなくて良くなるため
プログラミングとしては非常に使いやすくなる。
ただ、 GLOBAL TEMPORARY TABLEは
外部セッションから見た場合、0件に見えるので
統計情報を取得した場合に常に0件として統計情報を取得してしまう。
したがって、大量のデータを扱う場合
適切なパフォーマンスが実現できない問題に直面する。
これを解決する手段として
プログラムで動的に統計情報を取得する
方法について解説する。
利用環境
>
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
>
サンプルソース
v_current_schema VARCHAR2(100); --カレントスキーマ (統計情報動的取得用)
-- 利用するテンポラリテーブルの、セッション内統計情報動的取得
select sys_context( 'userenv', 'CURRENT_SCHEMA' ) INTO v_current_schema
from dual;
DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => v_current_schema, TABNAME => '取得したいテンポラリテーブル名', OPTIONS => 'GATHER' ,DEGREE => 4, CASCADE => TRUE , force => TRUE , Estimate_percent => 50);