暂无图片
暂无图片
10
暂无图片
暂无图片
暂无图片

全局索引和本地索引使用场景

OceanBase 2022-12-03
1431

1、全局索引和本地索引的作用

· 本地索引

分区表的本地索引和非分区表的本地索引类似,索引的数据结构和主表的数据结构保持一对一的对应关系,但由于主表已经做了分区,主表的“每一个分区”都会有自己单独的索引数据结构。对每一个索引数据结构来说:里面的键(Key)只映射到自己分区中的主表数据,不会映射到其它分区中的主表,因此这种索引被称为本地索引。本地索引的分区方式和分区键与主表相同,但无法做到全局唯一性约束。

· 全局索引

和分区表的本地索引相比,分区表的全局索引不再和主表的分区保持一对一的关系, 而是将所有主表分区的数据合成一个整体来看,索引中的一个键可能会映射到多个主表分区中的数据(当索引键有重复值时)。更进一步,全局索引可以定义自己独立的数据分布模式,既可以选择非分区模式也可以选择分区模式;在分区模式中,分区的方式既可以和主表相同也可以和主表不同。全局索引可以有非分区和分区模式,分区也可以是独立的分区方式和分区键。

全局索引非必要不要随便用;一般都是有全局唯一的需求,或者是能明确通过全局索引能提升用户场景请求的性能。

2、受影响的场景

分区表场景

· 分区表的全局索引对性能的影响:

缺点:对修改操作的影响很大,一个简单的 DML 语句都会因为要同步修改全局索引而产生分布式事务,影响性能。

优点:可以做到全局唯一性约束,某些业务兼容性更友好。

· 分区表的本地索引对性能的影响:

优点:只对对应的 Partition 进行索引。不会涉及全局的修改;仅是本地事务,对性能相对友好。

缺点:缺少全局唯一性约束。

非分区表场景

非分区表的全局索引在 SCHEMA 上是全局索引,但是实际存储和 local 索引是一样的;也可以理解为:非分区表没有全局索引的说法。

结论:

在非分区表场景,全局索引和 LOCAL 索引对性能的影响没有区别。

在分区表场景,全局索引涉及全局的 DML 修改,对性能有消极影响。

一般来说,Sysbench 、TPCH、BMSQL均建议使用本地索引。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论