非同一キー索引のプローブは、同一キー索引のプローブよりも高コストです。索引が同一キー索引のときに(ローカルまたはグローバルのいずれでも)、索引列を含む条件がOracleに発行されると、パーティション・プルーニングによって、条件の適用範囲を索引パーティションのサブセットに限定できます。
たとえば、図3-4において、条件がdeptno=15
である場合、オプティマイザはこの条件を索引の2番目のパーティションにのみ適用すればよいことを認識します。(条件にバインド変数が含まれている場合、オプティマイザは条件を適用するべきパーティションを正確には認識できませんが、関係があるパーティションは1つのみであることはわかっており、実行時には1つの索引パーティションにのみアクセスします。)
索引が非同一キー索引である場合、Oracleは通常、索引列を含む条件をN
個の索引パーティションすべてに適用する必要があります。このためには、単一のキーを参照するか、または索引レンジ・スキャンを実行する必要があります。レンジ・スキャンの場合、Oracleは、N
個の索引パーティションの情報を結合する必要もあります。たとえば、図3-5で、ローカル索引はchkdate
でパーティション化されており、索引キーはacctno
にあります。条件がacctno=31
である場合、Oracleは12個の索引パーティションすべてをプローブします。
パーティション列に対する条件もある場合は、索引のプローブを複数実行する必要はありません。Oracleは、ローカル索引は基礎となる表と同一レベルでパーティション化されるという特性を利用し、パーティション・キーに基づいてパーティションをプルーニングします。たとえば、図3-5において条件がchkdate<3/97
である場合、Oracleがプローブする必要のあるパーティションは2つのみです。
このように、非同一キー索引では、パーティション・キーがWHERE
句に含まれるが索引キーの一部ではない場合には、オプティマイザが、基礎となる表のパーティションに基づいてプローブするべき索引パーティションを判断します。
ローカルの非同一キー索引のキーを使用する大量の問合せおよびDML文がすべての索引パーティションをプローブする必要がある場合は、この仕組みによって、ローカル非同一キー索引がもたらすパーティションの独立性の程度が実質的に低くなります。
表3-2 同一キー・ローカル索引、非同一キー・ローカル索引およびグローバル索引の比較
索引の特性 | 同一キー・ローカル | 非同一キー・ローカル | グローバル |
---|---|---|---|
一意索引の可/不可 |
可 |
可 |
可能。パーティション列以外の列の索引を使用する場合はグローバルである必要がある。 |
管理性 |
容易 |
容易 |
煩雑 |
OLTP |
適切 |
不適切 |
適切 |
長時間実行(DSS) |
適切 |
適切 |
適切でない |