oracleパーティションインデックスの詳細について
表は、ランク、hash、listパーティションによって、テーブルパーティション後のインデックスと一般テーブル上のインデックスとは異なります。oracleはパーティションテーブル上のインデックスに対して、2つの種類に分類されます。すなわち、ローカルインデックスとグローバルインデックスです。次に、これら2つのインデックスの特徴と限界についてまとめます。ローカルインデックスlocal index 1.ローカルインデックスは必ずパーティションインデックスであり、パーティションキーはテーブルのパーティションキーに相当し、パーティション数はテーブルのパーティション数に相当し、一つの文では、ローカルインデックスのパーティションメカニズムはテーブルのパーティションメカニズムと同じです。2.部分索引の索引列がパーティションキーで始まる場合は、プレフィックスローカルインデックスと呼びます。3.部分索引の列がパーティションキーで始まるか、またはパーティションキー列を含まない場合は、非プレフィックスインデックスと呼びます。4.ローカルインデックスはパーティションテーブルにのみ依存します。5.プレフィックスと非プレフィックスのインデックスは、索引パーティションの削除をサポートしてもいいです。クエリの条件にはインデックスパーティションキーが含まれていることが前提です。6.ローカルインデックスはパーティション内の一意性のみをサポートし、テーブル上の一意性をサポートできません。したがって、ローカルインデックスでテーブルに一意性の制約を課すなら、制約にはパーティションキー列が含まれていなければなりません。7.ローカルパーティションインデックスは単一のパーティションに対して、各パーティションインデックスは一つのテーブルパーティションだけを指します。グローバルインデックスはそうではなく、一つのパーティションインデックスがnつのテーブルパーティションを指すことができます。同時に、一つのテーブルパーティションがnつのインデックスパーティションを指すこともあります。パーティションテーブルのあるパーティションにtruncateまたはmove、shrinkなどをすると、n個のグローバルインデックスパーティションに影響を与える可能性があります。8.ビットマップ索引は、ローカルパーティションインデックスのみです。9.ローカルインデックスはデータ倉庫環境に多く適用されます。グローバルインデックスglobal index 1.グローバルインデックスのパーティションキーとパーティション数とテーブルのパーティションキーとパーティション数は異なるかもしれません。テーブルとグローバルインデックスのパーティションメカニズムは異なります。2.グローバルインデックスは、パーティションでもいいし、パーティションでもないインデックスでもいいです。グローバルインデックスは、プレフィックスインデックスでなければなりません。つまり、グローバルインデックスのインデックス列は、インデックスパーティションキーをその最初の数列として使用しなければなりません。3.グローバルインデックスはパーティションテーブルに依存できます。非パーティションテーブルに依存することもできます。4.グローバルパーティションインデックスの索引項目は、いくつかのパーティションを指すことがあります。したがって、グローバルパーティションインデックスに対しては、一つのパーティションのデータを切り捨てても、いくつかのパーティションまたはインデックス全体が必要です。5.グローバルインデックスはoltpシステムに多く適用されます。6.グローバルパーティションインデックスは範囲またはハッシュパーティションのみで、shパーティションは10 g以降にサポートされます。7.oracle 9 i以降はパーティションテーブルに対してmoveまたはtruncateを作成する場合、udate global indexes文でグローバルパーティションインデックスを同期して更新し、一定のリソースを消費して高度の利用可能性を交換することができます。8.表はa列でパーティションを作成し、インデックスはbで局部パーティションインデックスを作成し、where条件でbで検索すると、oracleはすべてのテーブルとインデックスのパーティションをスキャンし、コストはパーティションより高くなります。この時はbを使ってグローバルパーティションインデックスを作成することが考えられます。パーティションインデックス辞書DBA_PARTINDEXESパーティションインデックスの概要統計情報は、各テーブルにどのようなパーティションインデックスがあり、パーティションインデックスのタイプ(local/global)があるかを知ることができます。ind_partitions 各パーティションインデックスのパーティションレベル統計情報Dba_indexes/dba_パーティーindexesは各表にどのような非パーティションインデックスがありますか?Alter index idx_を再構築しますか?name rebuild partition index_partition_name[online nologging]は、各パーティションインデックスに対してrebuildを行う必要があります。再構築する時はオンラインを選択できます。またはnologingインデックスを作成する時はログを生成せず、スピードを上げてください。Alter index rebuild idx_name[online nologing]非パーティションインデックスは、index全体でパーティションインデックスインスタンス
--1、
CREATE TABLE P_TAB(
C1 INT,
C2 VARCHAR2(16),
C3 VARCHAR2(64),
C4 INT ,
CONSTRAINT PK_PT PRIMARY KEY (C1)
)
PARTITION BY RANGE(C1)(
PARTITION P1 VALUES LESS THAN (10000000),
PARTITION P2 VALUES LESS THAN (20000000),
PARTITION P3 VALUES LESS THAN (30000000),
PARTITION P4 VALUES LESS THAN (MAXVALUE)
);
--2、
CREATE INDEX IDX_PT_C4 ON P_TAB(C4) GLOBAL PARTITION BY RANGE(C4)
(
PARTITION IP1 VALUES LESS THAN(10000),
PARTITION IP2 VALUES LESS THAN(20000),
PARTITION IP3 VALUES LESS THAN(MAXVALUE)
);
--3、
CREATE INDEX IDX_PT_C2 ON P_TAB(C2) LOCAL (PARTITION P1,PARTITION P2,PARTITION P3,PARTITION P4);
--4、 ( )
CREATE INDEX IDX_PT_C1
ON P_TAB(C1)
GLOBAL PARTITION BY RANGE (C1)
(
PARTITION IP01 VALUES LESS THAN (10000000),
PARTITION IP02 VALUES LESS THAN (20000000),
PARTITION IP03 VALUES LESS THAN (30000000),
PARTITION IP04 VALUES LESS THAN (MAXVALUE)
);
--5、
SELECT * FROM USER_IND_PARTITIONS;
SELECT * FROM USER_PART_INDEXES;
を再構築することができます。