在 Oracle 12c 12.1 中,当直接插入特定分区时,我在同一个表上的多个分区中拥有的任何全局唯一索引是否仍在使用?是否会继续跨分区维护唯一性约束?如果不是,那么首先拥有全球指数有什么好处?
问问题
17 次
1 回答
0
如果您有疑问,为什么不做一个简单的测试呢?
create table test_tab (
id int,
trans_date date)
PARTITION BY RANGE (trans_date)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION p_2020 VALUES LESS THAN ( DATE'2021-01-01'),
PARTITION p_2021 VALUES LESS THAN ( DATE'2022-01-01')
);
create unique index test_tab_ux1 on test_tab(id);
insert into test_tab partition (p_2020)
(id, trans_date) values (1, DATE'2020-01-01');
insert into test_tab partition (p_2021)
(id, trans_date) values (1, DATE'2021-01-01');
ORA-00001: unique constraint (ZZZ.TEST_TAB_UX1) violated
因此,您会看到索引在预期的分区中保持唯一性。
您应该知道它是有代价的——只要您删除或截断某个分区,索引就会变得无效并且必须重新构建(手动或在使用时集成UPDATE INDEXES
)。
因此,基本上您尝试完全避免对分区表的唯一约束(并在维护过程中强制保持一致性)或至少将唯一键的一部分作为分区键- 这种情况可以用local
索引覆盖。
于 2021-04-16T14:47:58.923 回答