兹拉坦
2024 年8 月 26 日 20:45
#1
在社区论坛问答区中,总能看到一些用户在创建分区表和相关索引时,总会问到类似于 “如何让唯一索引中不去包含分区键” 之类的问题,例如:有主键和唯一索引键的表应该如何设置分区? 等等。
这些问题一般都和 OceanBase MySQL 模式下的扩展功能 global index(全局索引)相关,我们在不久之前也直播的《DBA 入门教程》中,专门用了一节内容来讲解 OceanBase 在 MySQL 模式租户下的各种扩展功能,其中介绍的第一种扩展功能就是这个 global index,这里也为大家总结了扩展功能这一小节的学习笔记 。
这里再附上一个《DBA 从入门到实践》的课程列表 。
这篇笔记中除了 global index 以外,还介绍了 recyclebin(回收站)、tablegroup(表组)、sequence(序列)等其他扩展功能,欢迎对这些扩展功能感兴趣的朋友参考。如果大家对这些功能有任何疑问或者建议,也欢迎在本帖中留言评论,我们会第一时间回复大家~
17 个赞
林夕一指
2025 年5 月 13 日 10:28
#13
全局索引吧,mysql好像没有分区本地索引的。我记得oracle好像有
4 个赞
林夕一指
2025 年5 月 19 日 09:06
#16
嗯,我仔细看了下文档。3.1.1后默认是本地索引(知识体系还在3.0 时代 )。有个问题请大佬解答下:既然有了分区 裁剪,那么局部前缀索引与局部非前缀索引的优劣势在哪呢?
2 个赞
兹拉坦
2025 年5 月 23 日 11:37
#18
记得前几天在 这个帖子 里回复过您一个类似的问题。
例如 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 个赞
兹拉坦
2025 年5 月 23 日 11:37
#19
强烈推荐用 explain 对比下这两个索引的执行计划,一目了然~
2 个赞