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; 
を再構築することができます。