关于 OceanBase 分区裁剪(Partition Pruning)的发生时机,以下描述正确的是?


A. 分区裁剪仅在 SQL 执行引擎的运行时阶段发生,通过逐行判断数据所属分区来动态跳过无关分区。

B. 分区裁剪在优化器生成执行计划阶段完成,优化器根据查询条件和分区边界静态计算需要访问的分区集合,执行时直接扫描这些分区。

C. 分区裁剪只有在 WHERE 条件中包含分区键等值条件时才会触发,范围条件和 IN 列表无法触发裁剪。

D. 对于二级分区表,分区裁剪只能在一级分区层面生效,无法裁剪到二级分区级别。

2 个赞

解析
分区裁剪(Partition Pruning)是 OceanBase 优化器在计划生成阶段(编译时) 完成的重要优化。优化器会根据查询的 WHERE 条件中的分区键过滤条件,结合表的分区定义(如 RANGE 边界、LIST 值列表、HASH 取模等),静态计算出需要扫描的分区 ID 集合,并将裁剪结果嵌入执行计划中。执行引擎在运行时直接扫描裁剪后的分区,不会逐行判断分区归属。这种编译时裁剪的方式避免了运行时逐行判断的开销。

  • A 错误 :分区裁剪发生在计划生成阶段 ,而非运行时逐行判断。
  • B 正确 :优化器静态计算需要扫描的分区,执行时直接使用裁剪结果。
  • C 错误 :范围条件(如 BETWEEN>< )和 IN 列表同样可以触发分区裁剪,只要条件中包含分区键且边界可计算。
  • D 错误 :对于二级分区表,分区裁剪可以同时在一级和二级分区层面生效 。如果查询同时提供了一级和二级分区键的条件,优化器可以裁剪到具体的二级分区;如果仅提供一级分区键,则裁剪到一级分区级别,但仍需扫描该一级分区下的所有二级分区。
3 个赞

正确答案:B

3 个赞

very good

2 个赞

加油加油