OceanBase分区裁剪还支持哪些表达式?

OceanBase分区裁剪还支持哪些表达式?

1 个赞

在 OceanBase 中,分区裁剪(Partition Pruning)除了支持简单的等值查询外,还支持多种表达式和条件方式。根据系统优化器的特性,OceanBase 支持以下表达式和方式来进行分区裁剪:

1. 等值条件表达式
对于 Hash 或 List 分区,如果分区函数是一个表达式,并且该表达式作为一个整体出现在等值条件里,也可以进行分区裁剪。例如,分区键为 c1 + c2 ,查询条件为 WHERE c1 + c2 = 1 时,优化器可以精确计算并命中对应的分区12。

2. INLIST 表达式
支持通过 IN 列表(INLIST)进行静态或动态的分区裁剪。当查询条件中包含分区键的多个枚举值时,优化器可以计算出这些值所在的分区并进行裁剪3。

3. 函数表达式
支持基于函数表达式的分区裁剪。例如,对于按时间字段进行 RANGE 分区的表,如果分区键使用了 UNIX_TIMESTAMP(gmt_create) 这样的函数,查询条件中对应使用相同的函数表达式时,可以触发分区裁剪37。

4. JOIN FILTER 表达式
在涉及多表连接(Join)的查询场景中,OceanBase 支持通过 Join Filter 来进行动态分区裁剪。这通常发生在连接条件中包含分区键时,优化器可以利用过滤条件在运行时动态排除不相关的分区3。