云数据库 GaussDB-表设计:选择分区方案

时间:2023-11-01 16:22:10

选择分区方案

当表中的数据量很大时,应当对表进行分区,一般需要遵循以下原则:

  • 【建议】使用具有明显区间性的字段进行分区,比如日期、区域等字段上建立分区。
  • 【建议】分区名称应当体现分区的数据特征。例如,关键字+区间特征。
  • 【建议】将分区上边界的分区值定义为MAXVALUE,以防止可能出现的数据溢出。
    表2 表的分区方式及使用场景

    分区方式

    描述

    Range

    表数据通过范围进行分区。

    Interval

    表数据通过范围进行分区,超出范围的会自动根据间隔创建新的分区。

    List

    表数据通过指定列按照具体值进行分区。

    Hash

    表数据通过Hash散列方式进行分区。

    典型的分区表定义如下:
     1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
    --创建Range分区表CREATE TABLE staffS_p1(  staff_ID       NUMBER(6) not null,  FIRST_NAME     VARCHAR2(20),  LAST_NAME      VARCHAR2(25),  EMAIL          VARCHAR2(25),  PHONE_NUMBER   VARCHAR2(20),  HIRE_DATE      DATE,  employment_ID  VARCHAR2(10),  SALARY         NUMBER(8,2),  COMMISSION_PCT NUMBER(4,2),  MANAGER_ID     NUMBER(6),  section_ID     NUMBER(4))PARTITION BY RANGE (HIRE_DATE)(    PARTITION HIRE_19950501 VALUES LESS THAN ('1995-05-01 00:00:00'),   PARTITION HIRE_19950502 VALUES LESS THAN ('1995-05-02 00:00:00'),   PARTITION HIRE_maxvalue VALUES LESS THAN (MAXVALUE));--创建Interval分区表,初始两个分区,插入分区范围外的数据会自动新增分区CREATE TABLE sales(prod_id NUMBER(6), cust_id NUMBER, time_id DATE, channel_id CHAR(1), promo_id NUMBER(6), quantity_sold NUMBER(3), amount_sold NUMBER(10,2))PARTITION BY RANGE (time_id)INTERVAL('1 day')( PARTITION p1 VALUES LESS THAN ('2019-02-01 00:00:00'),  PARTITION p2 VALUES LESS THAN ('2019-02-02 00:00:00'));--创建List分区表CREATE TABLE test_list (col1 int, col2 int)partition by list(col1)(partition p1 values (2000),partition p2 values (3000),partition p3 values (4000),partition p4 values (5000));--创建Hash分区表CREATE TABLE test_hash (col1 int, col2 int)partition by hash(col1)(partition p1,partition p2);

    更多的表分区语法信息参见CREATE TABLE PARTITION

support.huaweicloud.com/centralized-devg-v2-opengauss/devg_03_0038.html