OceanBase 全局索引相比本地索引,会带来哪些开销() A. DML 操作维护全局索引,跨分区分布式事务开销 B. 占用更多磁盘存储空间 C. 分区裁剪失效场景更多 D. 全局索引副本不参与 Paxos 复制,减少网络开销

OceanBase 全局索引相比本地索引,会带来哪些开销()
A. DML 操作维护全局索引,跨分区分布式事务开销
B. 占用更多磁盘存储空间
C. 分区裁剪失效场景更多
D. 全局索引副本不参与 Paxos 复制,减少网络开销

正确答案:A、B、C

逐项解析

A. DML 操作维护全局索引,跨分区分布式事务开销 :white_check_mark:

这是全局索引最核心的开销。全局索引拥有独立于主表的分区规则,索引数据与表数据不一定存储在同一物理位置。当执行 DML 操作时,维护全局索引需要发起跨分区的分布式事务 ,涉及远程过程调用(RPC),对写入性能影响显著。根据 OceanBase 官方文档,全局索引数据和表数据不在同一位置时,一次 TABLE LOOKUP 操作就包含一次跨节点的 RPC 请求。

实测数据显示,创建一个 全局索引就可能将系统写入性能降低到原来的约 30%,而局部索引即使创建 8 个,写入性能仍能保持在 85% 左右。

B. 占用更多磁盘存储空间 :white_check_mark:

全局索引作为一张独立的索引表,拥有自己的分区规则和存储结构,需要额外占用磁盘空间来存储索引数据。相比本地索引(索引数据与表数据在同一分区内),全局索引的数据与表数据分离存储,整体空间开销更大。

C. 分区裁剪失效场景更多 :white_check_mark:

全局索引的分区键与主表不同,查询时虽然可以通过全局索引定位到索引分区,但回表(TABLE LOOKUP)阶段需要跨分区访问主表数据,可能导致主表侧的分区裁剪失效,引发跨分区扫描。此外,如果查询条件不包含主表的分区键,即使有全局索引,回表操作也可能涉及多个分区的扫描,增加网络传输开销。

D. 全局索引副本不参与 Paxos 复制,减少网络开销 :x:

这个说法是错误 的。在 OceanBase 中,全局索引本质上是一张独立的索引表,其副本同样参与 Paxos 复制 ,以保证数据的强一致性和高可用性。全局索引不仅不会减少网络开销,反而因为跨分区维护和 Paxos 复制的双重开销,网络消耗比本地索引更大。