【有问必答】OceanBase 中的全局索引是什么?

在社区论坛问答区中,总能看到一些用户在创建分区表和相关索引时,总会问到类似于 “如何让唯一索引中不去包含分区键” 之类的问题,例如:有主键和唯一索引键的表应该如何设置分区? 等等。

这些问题一般都和 OceanBase MySQL 模式下的扩展功能 global index(全局索引)相关,我们在不久之前也直播的《DBA 入门教程》中,专门用了一节内容来讲解 OceanBase 在 MySQL 模式租户下的各种扩展功能,其中介绍的第一种扩展功能就是这个 global index,这里也为大家总结了扩展功能这一小节的学习笔记

这里再附上一个《DBA 从入门到实践》的课程列表

这篇笔记中除了 global index 以外,还介绍了 recyclebin(回收站)、tablegroup(表组)、sequence(序列)等其他扩展功能,欢迎对这些扩展功能感兴趣的朋友参考。如果大家对这些功能有任何疑问或者建议,也欢迎在本帖中留言评论,我们会第一时间回复大家~

17 个赞

这个学习笔记真的大赞:+1:

2 个赞

生怕有一天他闭源文档了

3 个赞

这个好

3 个赞

我先收藏下来,以后再看 :grin:

3 个赞

什么时候上分区本地索引呀

4 个赞

MySQL 模式下默认就是 local 索引吧?

5 个赞

全局索引吧,mysql好像没有分区本地索引的。我记得oracle好像有

4 个赞

赞一下

5 个赞

先码住

4 个赞

嗯,我仔细看了下文档。3.1.1后默认是本地索引(知识体系还在3.0 时代 :rofl:)。有个问题请大佬解答下:既然有了分区 裁剪,那么局部前缀索引与局部非前缀索引的优劣势在哪呢?

2 个赞

超级棒的笔记

3 个赞

记得前几天在 这个帖子 里回复过您一个类似的问题。

例如 c1 是分区键,过滤条件是 WHERE c1 = 1 and c2 = 2 and c3 > 3,那么 idx1(c2, c3) 就是您说的局部前缀索引,idx2(c3, c2) 就是您说的局部非前缀索引。

这个过滤条件中:

  • 如果用 idx1 的话,会先分区裁剪,然后利用 idx1 对 c2 = 2 and c3 > 3 这两个过滤条件进行过滤;
  • 如果用 idx2 的话,也会先分区裁剪,然后利用 idx2 对 c3 > 3 这一个过滤条件进行过滤,然后再把过滤出来的结果遍历一遍,遍历时会用 c2 = 2 这个条件进行过滤,效率明显会比用 idx1 要低不少。

一般情况下,就像您说的这样,会依赖最左匹配原则筛选出最合适的索引~

3 个赞

强烈推荐用 explain 对比下这两个索引的执行计划,一目了然~

2 个赞

大佬,你这个解释比文档清楚多了。

1 个赞

主要还是文档误人

1 个赞

非常优质的文章

1 个赞

好文,学习

学习了