一、基本分区类型 1. 范围分区(Range Partitioning) • 核心逻辑:根据指定字段(如日期、数值)的范围划分数据,每个分区对应一个连续的取值区间。 • 适用场景:时间序列数据(如订单表按月份分区)、数值型数据(如销售数据按金额区间分区)。 • 示例:`PARTITION BY RANGE (order_date) (PARTITION p202301 VALUES LESS THAN (TO_DATE('2023-02-01','YYYY-MM-DD')), ...)`。
2. 列表分区(List Partitioning) • 核心逻辑:根据字段的离散值(如地区、类别)划分数据,每个分区对应一组具体的取值。 • 适用场景:离散型枚举数据(如客户表按省份分区、产品表按类别分区)。 • 示例:`PARTITION BY LIST (region) (PARTITION p_north VALUES ('北京','天津','河北'), ...)`。
二、扩展分区类型 1. 组合分区(Composite Partitioning) • 核心逻辑:在基本分区类型基础上,对每个分区再进行二次分区(如范围-列表、范围-哈希)。 • 适用场景:需要多维度划分数据的复杂场景(如订单表先按时间范围分区,再按地区列表分区)。 • 示例:`PARTITION BY RANGE (order_date) SUBPARTITION BY LIST (region) (...)`。
2. 间隔分区(Interval Partitioning) • 核心逻辑:自动创建新分区的范围分区扩展,当插入的数据超出现有分区范围时,Oracle会自动生成新分区。 • 适用场景:定期新增数据(如每日日志表),无需手动维护分区。 • 示例:`PARTITION BY RANGE (log_date) INTERVAL (NUMTODAY('DAY')) (PARTITION p202301 VALUES LESS THAN (TO_DATE('2023-02-01','YYYY-MM-DD')))`。
3. 虚拟列分区(Virtual Column Partitioning) • 核心逻辑:基于表的虚拟列(计算列)进行分区,虚拟列不存储实际数据,仅用于分区逻辑。 • 适用场景:需要通过计算值(如订单金额*税率)分区,或对未存储的衍生字段分区。 • 示例:`PARTITION BY RANGE (order_total * tax_rate) (...)`(`order_total`和`tax_rate`为表实际列)。