OceanBase优化器会进行什么优化?

某表按created_date 字段进行RANGE分区,每月一个分区。执行查询SELECT * FROM orders WHERE created_date BETWEEN ‘2025-01-01’ AND ‘2025-03-31’ 时,OceanBase优化器会进行什么优化?

A. 全表扫描
B. 分区裁剪
C. 索引全扫描
D. 自动并行查询

B. 分区裁剪

正确答案是:B. 分区裁剪

  • 选项 B 正确 :在 OceanBase(以及 GaussDB 等分布式数据库)中,当表按某个字段(如 created_date )进行 RANGE 范围分区时,如果查询条件(WHERE 子句)中包含该分区键的范围比较(如 BETWEEN>< 等),数据库优化器会根据查询条件自动判断需要访问哪些分区。在这个例子中,优化器会识别出只需要扫描 2025年1月、2月和3月对应的三个分区,从而跳过其他无关的月份分区。这种机制被称为分区裁剪(Partition Pruning) ,它能显著减少需要扫描的数据量,大幅提高查询效率。
  • 选项 A 错误 :全表扫描是指扫描表中所有的数据。由于使用了合适的分区键作为查询条件,优化器不会选择全表扫描。
  • 选项 C 错误 :索引全扫描是指在整棵索引树上进行搜索。虽然查询可能会用到索引,但针对此题考察的核心概念,优化器首先执行的是基于分区表的“分区裁剪”操作。
  • 选项 D 错误 :并行查询是一种利用多核 CPU 或多节点并发处理数据的执行策略。虽然 OceanBase 支持并行查询,但它不是针对“带分区键 WHERE 条件的 RANGE 分区查询”这一特定场景最核心、最直接的底层物理结构优化。