全局索引(Global Index)设计不当,跨分区查询反而更慢?这几个要点必须知道

从MySQL迁到OceanBase后,很多同学喜欢给非分区键建全局索引来加速查询。但如果不了解全局索引的“脾气”,可能适得其反。

全局索引的核心原理 :它相当于一张独立的索引表,按索引键分区,存储着指向主表数据的指针。当你的查询条件命中全局索引时,OB会先扫索引分区定位数据位置,再跨分区抓取数据。

几个实战要点:

  1. 索引分区键要与查询条件匹配
    如果索引按order_date 分区,但查询只有user_id 条件,索引帮不上忙。
  2. 避免在频繁更新的列上建全局索引
    每次更新索引列都会触发跨分区事务,写入放大明显。
  3. 警惕“索引热点”
    所有查询都集中在最近时间分区,会导致该分区成为瓶颈。
  4. 覆盖索引能大幅提升性能

sql

CREATE GLOBAL INDEX idx_covering ON orders(order_date, user_id, amount) INCLUDE (order_id); – 避免回表

性能对比例子 :查询WHERE order_date BETWEEN ? AND ? ,无索引2.3秒,只有本地索引1.8秒,全局索引0.15秒。

一句话总结 :全局索引是跨分区查询的利器,但设计时要考虑写入代价和访问模式。

【标签】 #全局索引 #分区设计 #性能优化 #索引设计

6 个赞

谢谢分享,内容收藏了

3 个赞

厉害!!!

3 个赞

学习了

2 个赞

谢分享,懂了!

2 个赞

:muscle:加油

2 个赞

很好

1 个赞

加油

1 个赞

我也是,真好

1 个赞

总结不错

1 个赞

加油:beers: