Dameng パーティション テーブルの使用

大規模なエンタープライズ アプリケーションやエンタープライズ レベルのデータベース アプリケーションでは、処理されるデータ量は通常 TB レベルに達しますが、このような大規模なテーブルに対してフル テーブル スキャンや DML 操作を実行すると、効率が非常に低くなります。

大量のデータの読み取り、書き込み、クエリ時のデータベースの効率を向上させるために、Dameng Database は、テーブルやインデックスなどのデータベース オブジェクト内のデータを小さな単位に分割して 1 つに保存する、テーブルとインデックスのパーティション化テクノロジーを提供します。別のセグメントでは、テーブルへのユーザー アクセスがより小さなセグメントへのアクセスに変換され、大規模なアプリケーション システムのパフォーマンスが向上します。

Dameng データベース パーティション テーブルには、主にレンジ パーティション化、ハッシュ パーティション化、リスト パーティション化の 3 つの方法があり、企業は日付 (範囲) や地域 (リスト) などの適切なパーティション化方法を使用して、大量のデータをパーティション化できます。Dameng データベースによって分割されたパーティションは互いに独立しており、異なるストレージ メディアに保存できるため、高可用性、バランスの取れた IO、メンテナンス コストの削減、クエリ パフォーマンスの向上といった企業の要件を完全に満たすことができます。今日は主に水平分割について話します。 

1. パーティションテーブルを作成する

1.レンジパーティションテーブルを作成する

create table r_t1 (pid int primary key ,id int)
partition by range (pid)
(partition p1 values less than (101),
partition p2 values less than (201));

t_r1 には 1 ~ 200 の値を入力します。

begin
for i in 1..200 loop
insert into r_t1 values (i,i+1);
end loop;
end;

パーティションテーブルとして表示されているテーブル r_t1 の種類を確認します。

select table_name,PARTITIONED from dba_tables where table_name='R_T1';

パーティション テーブル内のパーティションを表示します。p1 と p2 の 2 つのパーティションとして表示されます。

select table_name,partition_name from dba_tab_partitions where table_name='R_T1';

パーティションテーブル内のレコード数をクエリします。

SQL> select count(*) from r_t1 partition (p1);

このようなレンジパーティションが作成されます。

2. リストパーティションの作成

create table l_t1 (id int,name varchar(20))
partition by list (name)
(partition p1 values  ('湖北'),
partition p2 values  ('湖南'),
partition p3 values  ('安徽'));

パーティション テーブルのパーティションを表示します。3 つのパーティション p1、p2、および p3 として表示されます。

SQL>select table_name,partition_name from dba_tab_partitions where table_name='L_T1';

3. ハッシュパーティションを作成する

SQL>CREATE TABLE sales01(sales_id INT, saleman CHAR(20),
saledate DATETIME, city  CHAR(10))
PARTITION BY HASH(city)
(PARTITION p1,
PARTITION p2,
PARTITION p3,
PARTITION p4 );

パーティションテーブル名を指定する必要がない場合は、ハッシュパーティション数を指定してハッシュパーティションテーブルを作成できます。

SQL>CREATE TABLE sales02(sales_id int, saleman char(20),
saledate DATETIME, city  CHAR(10)) PARTITION BYHASH(city)
PARTITIONS 4;

PARTITIONS の後の数字はハッシュ パーティションのパーティション数を示し、STORE IN 句でハッシュ パーティションが順番に使用する表スペースを指定します。このようにして作成されたハッシュパーティションテーブルのパーティション名は匿名ですが、DM7では一律にDMHASHPART+パーティション番号(0から始まる)をパーティション名として使用します。たとえば、sales02 の最初のパーティションのデータをクエリする必要がある場合は、次のステートメントを実行できます。

SQL>SELECT* FROM sales02 PARTITION (DMHASHPART1);

2. パーティションを追加する

SQL> alter table r_t1 add partition p3 values less than(301);

 パーティションの数を確認すると、新しいパーティション p3 が追加されていることがわかります。

3. パーティションの削除

SQL> alter table r_t1 drop partition p3;

新しく追加されたパーティション P3 が削除されていることがわかります。

4. パーティションを結合する

Sql> alter table r_t1 merge partitions p1,p2 into partition p1_2;

5. パーティションの分割

SQL> alter table r_t1 split partition p1_2 at (100) into (partition p1,partition p2);

6.水平パーティションテーブルの制限事項

1. パーティション列の型は、数値、文字、または日付である必要があります。BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、時間間隔型およびユーザー定義型は、パーティション列としてサポートされていません。

2. レンジ分割およびハッシュ分割の分割キーは最大 16 列まで複数指定できますが、LIST 分割の分割キーは一意である必要があります。

3. 水平分割表に主キーおよび一意制約を指定する場合は、主キーおよび一意制約にパーティションキーを含める必要があります。

4. 水平分割テーブルは一時テーブルをサポートしません。

5. 水平分割表には自己参照制約を設定できません。

6. 通常の環境では、水平パーティション テーブルの全レベルの合計パーティション数の上限は 65535 ですが、MPP 環境では、水平パーティション テーブルの全レベルの合計パーティション数の上限は 65535 です。 INI パラメータ MAX_EP_SITES に基づいており、上限は 2 ^(16 - log2MAX_EP_SITES) です。例: MAX_EP_SITES がデフォルト値の 64 の場合、パーティションの総数の上限は 1024 です。

7. パーティション化されたサブテーブルでは DDL 操作は許可されません。

8. ハッシュ パーティションは、名前変更、制約の削除、トリガーを有効にするかどうかの設定などの変更操作をサポートします。

9. 範囲パーティショニングは、パーティションのマージ、分割、追加、削除、交換、名前変更、制約の削除、およびトリガーを有効にするかどうかの設定をサポートします。

10. LIST パーティションは、追加、削除、交換、名前変更、制約の削除、トリガーの有効化の設定などの操作をサポートします。

11. LIST パーティション範囲値を NULL にすることはできません。

おすすめ

転載: blog.csdn.net/qq_35273918/article/details/130820326