Oracle 分区表是将一个大表分割成多个小表,每个小表称为一个分区,分区表的优点包括:提高查询性能、改善管理性、增强容错性等。

分区表的分类

  1. 范围分区(Range Partitioning): 范围分区是将数据基于范围映射到每个分区。范围通常由分区键决定,如日期。常见的应用是根据时间范围分割数据(例如,按月份分区)。

示例:

CREATE TABLE RangeTable (
    idd INT PRIMARY KEY,
    enamel VARCHAR(10),
    grade INT
)
PARTITION BY RANGE (grade) (
    PARTITION part1 VALUES LESS THAN (1000) TABLESPACE Part1_tb,
    PARTITION part2 VALUES LESS THAN (MAXVALUE) TABLESPACE Part2_tb
);
  1. 自动分区(Interval Partitioning): 自动分区根据时间间隔自动生成新的分区,常见应用为按月或按年自动分区。

示例:

CREATE TABLE auto_partition (
    OBJECT_ID NUMBER,
    OBJECT_TYPE VARCHAR2(128),
    CREATED DATE
)
PARTITION BY RANGE (CREATED) INTERVAL(NUMTOYMINTERVAL(1, 'month')) (
    PARTITION P0 VALUES LESS THAN (TO_DATE('1-1-2011', 'dd-mm-yyyy'))
);
  1. 列表分区(List Partitioning): 列表分区适用于分区键值离散且数量有限的场景,例如根据某个状态对数据进行分区。

示例:

CREATE TABLE PROBLEM_TICKETS (
    PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
    DESCRIPTION VARCHAR2(2000),
    CUSTOMER_ID NUMBER(7) NOT NULL,
    DATE_ENTERED DATE NOT NULL,
    STATUS VARCHAR2(20)
)
PARTITION BY LIST (STATUS) (
    PARTITION PENDING VALUES ('OPEN', 'IN_PROGRESS'),
    PARTITION RESOLVED VALUES ('CLOSED')
);

分区表能够显著提高大数据表的查询性能,并简化管理工作。通过分区索引的使用,可以进一步提升查询效率。