以下哪个策略可以提高分布式场景下对一张分区表的跨分区扫描的性能?(单选)

以下哪个策略可以提高分布式场景下对一张分区表的跨分区扫描的性能?

A. 将表设置为Buffer表

B. 将表加入SHARDING=NONE的表组

C. 分配较大的MEMSTORE

D. 分配较大的PLAN CACHE

1 个赞

正确答案是 B. 将表加入SHARDING=NONE的表组

详细解析:

  • :white_check_mark: 选项 B (将表加入SHARDING=NONE的表组) 正确
    在分布式数据库中,跨分区扫描(即无法命中分区键的查询)性能极差,因为需要发起分布式计划,访问多个远程节点并进行数据合并,网络开销巨大2。将表加入 SHARDING=NONE 的表组,意味着该表的所有分区会被绑定到同一个物理节点上(即单副本集中部署)。这样,即使是跨分区的扫描,也退化为了单机上的本地操作,彻底消除了跨节点的 RPC 通信和分布式数据合并的开销,从而大幅提升跨分区扫描的性能。

  • :x: 选项 A (将表设置为Buffer表) 错误
    Buffer 表通常用于存储少量且被高频读取的配置类或字典类数据,使其常驻内存,并不适用于解决大规模分区表的跨分区扫描问题。

  • :x: 选项 C (分配较大的MEMSTORE) 错误
    MemStore 主要用于缓存写入过程中的增量数据。增大 MemStore 可以提升高并发写入时的吞吐量和延迟表现,但对于以读为主的跨分区扫描查询,并不能从根本上解决跨节点的网络瓶颈。

  • :x: 选项 D (分配较大的PLAN CACHE) 错误
    Plan Cache 的作用是缓存 SQL 的执行计划,避免重复解析和优化。虽然这能减少 CPU 消耗,但它无法改变“跨分区查询必须访问多个节点”的物理事实,因此不能提高跨分区扫描本身的执行效率。

表组配置 SHARDING=NONE 代表关闭分区打散,该表所有分区会尽量调度到同一台 OB 服务器节点。跨分区扫描时,数据全部在本地机器,无需大量跨节点网络传输,大幅降低网络 IO 开销,显著提升跨分区批量查询性能。

B. 将表加入SHARDING=NONE的表组