Oracleのパーティション表の概要(詳細)

3998 ワード

パーティション・テーブルの使用方法
パーティション・テーブルは、ビジネス・シーンに基づいて決定されるルールに従ってテーブルを分割します.
推奨値
1が2 Gより大きい表2のパーティションキーは業務の需要に反応しなければならない.CUDRはできるだけパーティション間操作をしないようにしなければならない.有効に分離すれば、全表スキャンはパーティションスキャンになり、IOを低下させるが、インデックスがすでに使用されており、結果セットが小さい場合、パーティション化は必ずしも効率を高めるとは限らない.
パーティションテーブル設計の考え方
パーティションのデータはできるだけ均一に保ち、偏差は20%程度に抑えます.パーティションキーの選択は常にUPDATEされるべきではありません.NULL値が表示されないようにしてください.そうしないと、MAXVALUEパーティションに投げ込まれます.また、キー値の大文字と小文字のパーティションの問題にも注意してください.パーティションは多すぎるべきではなく,hashパーティションは2のn次方倍でなければならず,CPUの同時能力も考慮しなければならない.
パーティション表のタイプ
レンジパーティション(Range Partition)
通常、月ごとに分割するなど、最も頻度の高いパーティションを使用します.このようなデータは均一性を維持したほうがいいです.パーティションの均一性がよくない場合は、他のパーティション方法を考慮する必要があります.
CREATE TABLE Test(
	ID NUMBER,
	CDATE VARCHAR2(8)
)

PARTITION BY RANGE(CDATE)(
	PARTITION par_test_2017_q1 VALUES LESS THAN ('20170401'),
	PARTITION par_test_2017_q2 VALUES LESS THAN ('20170701'),
	PARTITION par_test_2017_q3 VALUES LESS THAN ('201701001'),
	PARTITION par_test_2017_q3 VALUES LESS THAN ('20180101'),
	PARTITION par_test_2018 VALUES LESS THAN (maxvalue),
)ENABLE ROW MOVEMENT;
--ENABLE ROW MOVEMENT  ,         UPDATE    ,         ,         。

ハッシュパーティション(Hash Partition)
データがそんなに簡単に分割されなければ、このような方法で柔軟になります.データを異なるブロックに均一に挿入することができ、同時で効率を向上させ、Rangeパーティションが使用できない場合はHashパーティションを使用することができる.
CREATE TABLE Test(
	ID NUMBER,
	CDATE VARCHAR2(8)
)
PARTITION BY HASH(NAME)(
	PARTITION par_test_01,
	PARTITION par_test_02,
	PARTITION par_test_03,
	PARTITION par_test_04
);

リストパーティション(List Partition)
この方式は、データをパーティション化する方法を明確に制御する必要がある場合に採用される.単列パーティションしかできません.データをグループ化することができます.例えば、都市パーティションによって、いくつかの都市を一緒に置くことができます.
CREATE TABLE Test(
	ID NUMBER,
	CITY VARCHAR2(8)
)
PARTITION BY LIST(CITY) (
	PARTITION par_test_01 VALUES('BJ','BD'),
	PARTITION par_test_02 VALUES('XA','SJZ'),
	PARTITION par_test_03 VALUES('SH','HZ'),
	PARTITION par_test_01 VALUES('SZ','GZ')
)ENABLE ROW MOVEMENT;

複合パーティション
データアーカイブに重点を置き、上記3つを組み合わせて使用します.ビジネスニーズのデータ分布に基づいて、適切な組み合わせを選択します.構文
PARTITION BY RANGE(CDATE) SUBPARTITION BY HASH(NAME)(
	PARTITION par_test_2017_q1 VALUES LESS THAN ('20170401')(
		SUBPARTITION sp_test_2017_q1_01,
		SUBPARTITION sp_test_2017_q1_02,
		SUBPARTITION sp_test_2017_q1_03,
		SUBPARTITION sp_test_2017_q1_04),
	PARTITION par_test_2017_q1 VALUES LESS THAN (maxvalue)(
		SUBPARTITION sp_test_2017_max_01,
		SUBPARTITION sp_test_2017_max_02,
		SUBPARTITION sp_test_2017_max_03,
		SUBPARTITION sp_test_2017_max_04),
)

上記の3つのパーティションに加えて、Oracleでは4つのパーティション方式が用意されており、異なる使用シーンに対応しています.上記の3つの主流パーティションの補完として利用できると思います.
インターバルパーティション
範囲パーティションを使用することを考えたことがありますか?時間が経つにつれて、手動で新しいパーティションを増やし続けます.間隔パーティションは、このようなビジネスシーンを解決し、条件を満たすと自動的にパーティションが増加します.
PARTITION BY RANGE(CDATE) INERVAL (NUMTOYMINTERVAL(1,'mouth'))(
	PARTITION par_test_2017_q1 VALUES LESS THAN (TO_DATE('20170401','yyyymmdd'))
)ENABLE ROW MOVEMENT;

フォーマット:NumToYMInterval(n,interval_unit);n:数値タイプinterval_unit:『YEAR』、『MONTH』、またはこの2つの値の1つに変換できる他の式
NumToYMInterval(1,‘YEAR’):1年後の間隔NumToYMInterval(-1,‘MONTH’):1ヶ月前
システムパーティション
システムパーティションは、パーティション条件を指定するのではなく、SQLにどのパーティションを挿入するかを指定します.
PARTITION BY SYSTEM(
	PARTITION par_test_01,
	PARTITION par_test_02
)

仮想列パーティション
このような仮想カラムデータは実際にディスクに存在しないが、SQL計算時にリアルタイムで取得され、仮想カラムは通常のカラムと同様にインデックスを構築し、パーティションキーを作成し、情報を収集することができる.
CREATE TABLE test(
	ID NUMBER,
	BUY NUMBER,
	SELL NUMBER,
	GAIN NUMBER AS (SELL-BUY)
)
PARTITION BY RANGE(GAIN)(
	PARTITION par_test_01 VALUES LESS THAN (10000),
	PARTITION par_test_02 VALUES LESS THAN (20000),
	PARTITION par_test_max VALUES LESS THAN (maxvalue)
)

関連パーティション(Reference Partition)
プライマリ・テーブル・パーティション、サブテーブル・パーティション.メインテーブルが変わったら、サブテーブルが自動的に適応します.これは後で議論していますが、今はあまり使われていないような気がします.この概念を知ればいい.