关于 OceanBase 分区剪枝(Partition Pruning)机制,以下说法正确的是?

关于 OceanBase 分区剪枝(Partition Pruning)机制,以下说法正确的是?

A. 分区剪枝仅在查询的 WHERE 条件中包含分区键等值条件时才会触发,范围条件或 LIKE 条件无法进行分区剪枝。

B. 在执行分布式查询时,分区剪枝发生在 SQL 执行引擎的运行时阶段,通过逐行判断数据所属分区来动态跳过无关分区。

C. 对于二级分区表,只有同时提供一级分区键和二级分区键的过滤条件,才能实现完全剪枝;仅提供一级分区键时只能剪枝到一级分区,仍需扫描其下所有二级分区。

D. 当查询条件中使用函数表达式包裹分区键(如 WHERE DATE(create_time) = '2024-01-01' ),优化器仍能识别并进行分区剪枝,前提是函数为确定性的。

解析
二级分区表的剪枝遵循“先一级、后二级”的逻辑。如果查询条件只包含一级分区键,系统可以剪枝到目标一级分区,但该一级分区下所有二级分区仍需扫描(无法剪枝到具体二级分区)。要实现完全剪枝,需同时提供两级分区键的过滤条件。

  • A 错误 :范围条件(如 id BETWEEN 1 AND 100 )同样可以触发分区剪枝,只要分区键在范围内,优化器可计算涉及的分区集合。LIKE 条件若前缀固定(如 LIKE 'abc%' )且分区键为字符串类型,也可能剪枝。
  • B 错误 :分区剪枝发生在 计划生成阶段(优化器) ,而非运行时。优化器根据条件静态计算出需要访问的分区 ID 列表,执行时直接扫描这些分区,不会逐行判断。
  • C 正确 :二级分区表剪枝规则:仅一级分区键 → 剪枝到一级分区级别;一级+二级 → 完全剪枝到具体二级分区。
  • D 错误 :在分区键上使用函数表达式通常会 阻断分区剪枝 ,因为优化器无法推断函数输出与分区边界的关系。可改写为分区键本身的条件,或使用生成列并对其进行分区。

正确答案:C