我有一个包含以下列的父表:
- PARENT_ID: UUID
- EVENT_DATE: TIMESTAMP
- DATA_COLUMN1: VARCHAR2(255)
- DATA_COLUMN2: VARCHAR2(255)
该表按 EVENT_DATE 进行范围分区。数据只保留一个月,每天都会删除最后一个分区。
根据我的理解,对 PK 使用全局索引会导致删除分区时性能不合格。这意味着该表的 PK 必须基于 PARENT_ID + EVENT_DATE 才能创建本地索引。
我有第二个表,它是第一个表的子表(通过一对多关系)。它具有以下列:
- CHILD_ID:UUID
- PARENT_ID:UUID - FK 到父表
- DATA_COLUMN3:VARCHAR2(255)
- DATA_COLUMN4:VARCHAR2(255)
为了对子表进行分区,我决定使用引用分区。它的一大优点:它消除了在子表中复制分区键的需要。但是,根据我的推理,实现这一目标的唯一方法是通过全局索引。这是我的思路:
- 要使父表的唯一索引是本地的,PK 必须包含分区键,例如 EVENT_DATE。
- 外键约束不能仅引用 PK 的一部分。因此子表必须同时包含 PARENT_ID 和 EVENT_DATE 列。
更重要的是,我还读到“使用引用分区时,大多数子表索引应该定义为全局索引,除非有令人信服的理由将给定索引定义为本地索引。” (http://www.nocoug.org/download/2010-05/Zitelli-Reference_Partitioning_NoCOUG.pdf)。
我是否遗漏了什么,或者没有全局索引或复制数据就无法使用参考分区?
非常感谢您解释参考分区如何与本地/全局索引一起使用!