以下关于 OceanBase 全局索引与本地索引描述正确的是?

以下关于 OceanBase 全局索引与本地索引描述正确的是?
A. 本地索引可跨分区检索数据
B. 全局索引 DML 维护开销比本地索引更大
C. 本地索引叶子节点存储全表主键
D. 创建本地索引必须显式写 LOCAL 关键字
选哪个

1 个赞

答案是BD

选B

:x: 选项 A (本地索引可跨分区检索数据) 错误:
本地索引(Local Index)是针对单个分区上的数据创建的,每个分区都有自己独立的索引。当查询条件不包含完整的分区键时,使用本地索引会导致无法进行分区裁剪,从而需要访问所有的索引分区,无法高效地跨分区定位单条记录。跨分区的高效检索正是全局索引的设计初衷。
:white_check_mark: 选项 B (全局索引 DML 维护开销比本地索引更大) 正确:
局部索引的维护仅涉及对应的分区,避免了跨分区的复杂操作;而全局索引的数据通常独立集中存储在与主表不同的节点上。每次对表数据进行插入、更新或删除(DML)操作时,为了维护全局索引的数据一致性,系统往往需要进行跨机器的 RPC 调用并处理分布式事务,因此其带来的维护代价和开销显著高于本地索引。
:x: 选项 C (本地索引叶子节点存储全表主键) 错误:
在 OceanBase 中,对于分区表而言,如果存在主键,那么主键必须包含表的分区键。本地索引作为二级索引,其叶子节点存储的是该索引列的值以及指向对应数据行的主键值指针。由于它只针对单个分区,所以它关联的是本分区内的行数据,而非“全表”的主键集合。
:x: 选项 D (创建本地索引必须显式写 LOCAL 关键字) 错误:
在 OceanBase 的 MySQL 模式下,为分区表创建索引时如果不指定任何关键字,系统默认创建的就是本地索引(LOCAL)。只有在 Oracle 模式下才默认创建全局索引,或者用户想显式改变默认行为时才需要手动指定 LOCAL 或 GLOBAL 关键字。

B. 全局索引 DML 维护开销比本地索引更大
C. 本地索引叶子节点存储全表主键
D. 创建本地索引必须显式写 LOCAL 关键字