- - PR -
パーティション・プルーニングとバインド変数について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-01-05 11:03
件名につきまして、ご質問させていただきます。
【環境】 Oracle9i 9.2.0.3 Enterprise Edition (Solaris 8) 【やりたいこと】 バインド変数を利用した処理でパーティション・プルーニングをCBOに選ばせたい。 【やったこと】 1.レンジパーティション(8分割)しているテーブルで 実行計画をサンプル率20%で取得。 テーブルの列は次のようなもの Partition_Key Char(8) Primary_Key Char(8) Data_1 number Data_2 date Data_3 char(n) Data_n varchar2(n) インデックスもパーティション化されている。 Partition_Key、Primary_Keyを使用。 2.次のSQLを実行(Partition_KeyとBind_Valueはchar型で定義) Select * From Target_table where Partition_key = :Bind_Value 【結果】 実行計画が次のようになり、パーティション・プルーニングが動作せず、 実効性能がプルーニングが聞いた場合より劣化する。 1.インデックスに対するレンジスキャン 2.ローカルインディックスを使用したROWID確定 3.パーティション確定 【回避策】 バインド変数ではなく定数で与えればプルーニングが動作する。 プルーニングが効いた場合はテーブル(実際へは単一パーティション)への フルアクセスが実行計画として選択されている。 実際は、バインド変数を使用したいわけではなくPL/SQLからの実行を行っており、 結果、バインド変数となってしまっています。 とりあえず、PL/SQL内でも動的PL/SQLとすることで回避可能です。 本数も少ないので動的に置き換えてと考えていますが、 なぜパーティションプルーニングが効かないのでしょうか? なにか情報がありましたらお願いいたします。 記述が足りない場合はご指摘ください。 以上 |
1
