多选题
以下哪些场景会直接导致分区裁剪失效,引发全分区扫描?()
A. 分区键字段使用函数加工:where date_format(ctime,’%Y-%m’)=‘2026-06’
B. 查询条件分区字段与常量发生隐式类型转换
C. SQL查询where条件直接携带分区键等值查询
D. 使用or拼接不同分区范围,跨多分区无统一过滤条件
多选题
以下哪些场景会直接导致分区裁剪失效,引发全分区扫描?()
A. 分区键字段使用函数加工:where date_format(ctime,’%Y-%m’)=‘2026-06’
B. 查询条件分区字段与常量发生隐式类型转换
C. SQL查询where条件直接携带分区键等值查询
D. 使用or拼接不同分区范围,跨多分区无统一过滤条件
正确答案:A、B、D
分区裁剪(Partition Pruning)是 OceanBase 查询优化的重要手段,优化器会根据 WHERE 条件中的分区键信息,只扫描符合条件的分区,避免全分区扫描。以下逐一分析:
where date_format(ctime,'%Y-%m')='2026-06'date_format、to_char、upper 等)后,优化器无法直接提取分区键的原始值来定位分区,导致分区裁剪失效,引发全分区扫描。正确写法应为 where ctime >= '2026-06-01' and ctime < '2026-07-01'。where partition_key = 100,优化器可以直接定位到对应的分区,只扫描该分区,不会引发全分区扫描。OR 连接多个分区范围条件时(如 where partition_key = 1 OR partition_key = 2 OR ... 跨大量分区),优化器可能无法有效裁剪,退化为扫描所有涉及的分区。尤其当 OR 条件复杂、跨分区过多且无统一过滤下推时,容易导致全分区扫描。