Oracle 分区表是将一个大表分割成多个小表,每个小表称为一个分区,分区表的优点包括:提高查询性能、改善管理性、增强容错性等。
分区表的分类:
- 范围分区(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
);
- 自动分区(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'))
);
- 列表分区(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')
);
分区表能够显著提高大数据表的查询性能,并简化管理工作。通过分区索引的使用,可以进一步提升查询效率。