OceanBase 使用全局索引的必要性

OceanBase 使用全局索引的必要性?

3 个赞

111

222

ceanBase 使用全局索引的必要性主要体现在以下场景:
1.跨分区查询优化
全局索引通过将所有分区数据合并处理,支持跨分区查询。当查询条件涉及多个分区时(如不同公司ID或员工ID),全局索引能显著减少数据扫描量,提升查询效率。 ‌
2.动态数据分布
全局分区索引(如哈希分区)可独立于主表分区模式,实现更灵活的数据分布策略。例如,当主表按范围分区时,全局分区索引可按哈希分区优化数据分布,避免数据倾斜。 ‌
3.应对业务变化
业务需求变更时,全局索引的独立分区模式使其更易调整。例如,当新增查询维度(如时间范围)时,无需修改主表分区规则即可通过调整全局索引实现负载均衡。 ‌
4.资源优化
全局非分区索引通过单一数据结构减少元数据维护成本,适合数据量较小或查询密集的场景。而全局分区索引通过独立分区策略可分散维护压力,适用于高并发写入场景。

1 个赞

666

1 个赞

以下 OceanBase 业务场景中,全局索引是 “不可替代” 的:

  1. 跨分区的非分区键查询:如查询 “所有分区中某一条件的全局数据”(无基表分区键过滤);
  2. 非分区键的排序 / 聚合查询:如按非分区键排序、分组统计,且数据量较大(避免分布式排序开销);
  3. 索引覆盖查询需求:查询字段可通过索引完全覆盖,无需回查基表(提升查询效率);
  4. 数据倾斜场景的优化:需通过全局索引的独立分区策略分散倾斜数据;
  5. 金融级一致性需求:需确保跨分区索引与基表的原子性修改(如支付、订单等核心业务)。

有一些统计类的查询需要跨分区的

OceanBase 使用全局索引的场景

OceanBase 数据库中使用全局索引的场景主要包括以下几点

全局唯一性需求:

业务需求:如果业务上除了主键外,还有其他列的组合需要满足全局唯一性的强需求,这种需求只能通过全局索引来实现。例如,业务需要确保某个非主键列的值在整个集群中是唯一的

查询条件无法获取分区键:

查询优化:如果业务的查询无法获取到分区键的条件谓词,且业务表没有高并发的同时写入,可以考虑创建全局索引。全局索引可以帮助避免全分区的扫描,从而提高查询性能

数据重新分区的需求:

灵活性:全局索引的分区模式与主表的分区模式完全独立,可以自由定义索引的分区规则和分区个数。这种灵活性使得全局索引在某些场景下更加适合,尤其是在需要根据不同的维度进行查询时

避免跨机分布式事务:

写入性能:虽然全局索引可以提供更强的查询能力和全局唯一性,但每一笔数据的写入都有可能变成跨机的分布式事务,这在高并发写入场景下会影响系统的写入性能。因此,如果查询可以拥有分区键的条件谓词,OceanBase 仍然推荐使用局部索引

结论

OceanBase 数据库中使用全局索引的场景主要包括满足全局唯一性需求、优化无法获取分区键的查询、提供数据重新分区的灵活性。然而,全局索引在高并发写入场景下可能会带来性能问题,因此在选择使用全局索引时需要权衡查询和写入的性能需求

全局我局部索引都有应用场景的,当然有其必要性了。