ヘッダーをスキップ
Oracle® Database Heterogeneous Connectivityユーザーズ・ガイド
12cリリース1 (12.1)
E52376-02
  目次へ移動
目次
索引へ移動
索引

前
次へ
 

索引統計と表統計の使用例

Oracleデータベースに10行の表を作成する次の文を考えてみます。

CREATE TABLE T1 (C1 number);

DBMS_STATSパッケージを使用して表を分析します。次に例を示します。

DBMS_STATS.GATHER_TABLE_STATS ('SCOTT','T1');
DBMS_STATS.GENERATE_STATS ('SCOTT','T1');

前述の例では、スキーマ名をSCOTTとし、表名をT1としています。DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

Oracle以外のシステムに1000行を含む表を作成します。

次のSQL文を発行します。

SELECT a.* FROM remote_t1@remote_db a, T1 b 
    WHERE a.C1 = b.C1;

Oracleオプティマイザは、エージェントに対して次のSQL文を発行します。

SELECT C1 FROM remote_t1@remote_db;

この文は、Oracle以外のシステムから1000行すべてをフェッチし、Oracleデータベース内で結合を実行します。

remote_t1表のC1列に一意の索引を追加して同じSQL文を再発行すると、エージェントはローカルt1C1の値ごとに次のSQL文を受信します。

...
SELECT C1 FROM remote_t1@remote_db WHERE C1 = ?;
...

注意:

?はバインド・パラメータ・マーカーです。また、Oracleにより生成されたバインド変数を含む結合条件は、ネステッド・ループ結合方法についてのみ生成されます。

SQL実行計画を確認するには、SQL文のEXPLAIN PLANを生成します。最初に、adminディレクトリにutlxplanをロードします。

次のように入力します。

EXPLAIN PLAN FOR SELECT a.* FROM remote_t1@remote_db a, T1 b 
    WHERE a.C1 = b.C1;

次の文を入力してutlxplsユーティリティ・スクリプトを実行します。

@utlxpls

OPERATION REMOTEは、リモートSQLが参照されていることを示します。

どの文が送信されるかを確認するには、次の文を入力します。

SELECT ID, OTHER FROM PLAN_TABLE WHERE OPERATION = 'REMOTE';