关于 OceanBase 分区表上全局索引的 DML 维护开销,以下描述正确的是?
A. 在分区表上创建全局索引后,INSERT 操作只需在数据所在分区写入数据,无需更新全局索引,因为全局索引是在查询时动态构建的。
B. 对分区表执行 DELETE 或 UPDATE 操作时,如果修改了分区键,且表上存在全局索引,所有全局索引都可能需要更新,且可能触发跨分区索引维护。
C. 全局索引的维护与本地索引一样,仅限于目标数据所在的分区内部,不会产生跨分区的开销。
D. 分区表上的全局唯一索引在 INSERT 时只需要检查目标分区的唯一性约束,无需跨分区校验,因为全局索引本身也是分区的。
3 个赞
解析 :
全局索引是独立于基表分区的索引结构,其分区方式可以与基表不同。当对分区表执行 DELETE、UPDATE(尤其修改分区键)时,可能触发全局索引的维护,且由于基表数据移动或删除可能影响多个全局索引分区,导致跨分区的索引更新开销。
-
A 错误 :全局索引必须同步维护 ,不能动态构建。每个 INSERT 操作都需要在全局索引的对应分区中插入索引条目,否则索引会不一致。
-
B 正确 :如果 UPDATE 修改了基表的分区键,数据可能跨分区迁移(实际是 DELETE + INSERT),此时所有全局索引需要在新旧两个分区 中分别执行删除和插入操作,产生跨分区开销。若 DELETE 删除的数据涉及全局索引条目,也需要在各索引分区中删除。
-
C 错误 :本地索引的维护只在基表数据所在的分区内部进行;但全局索引的维护可能跨多个索引分区 ,代价更高。
-
D 错误 :全局唯一索引在 INSERT 时必须检查所有索引分区 中是否已存在相同键值(因为全局唯一性不能仅靠单个分区保证),这需要跨分区通信或全局协调,开销更大。
3 个赞