索引表单副本构建流程疑问

【产品名称】

【产品版本】

【问题描述】在学习索引的单副本构建时存在以下疑问

1.如果索引是局部索引,原表数据量比较大,静态数据有两个sstable,在扫描原表数据时,是分别扫描两个sstable,各自内部先排序一次,最终再排序一次? 还是一次性扫描到所有的数据,再进行一次排序?

2.如果索引是全局索引,在生成静态数据时,是通过SCAN算子经过一次get_next_row拿到所有的数据,映射成索引表的数据,再去排序,构造SSTABLE?还是?

  1. sstable本身就是有序的,扫描到所有数据后再按索引键排序。
  2. 是的。

您好,还想请问一下,全局索引构建过程中,是否存在局部索引这种中间结果?如果存在,这种结果是如何生成全局索引?是多路归并合成一个有序的结果集,还是通过什么操作?

请教一下,在构建全局唯一索引时,单副本构建的物理计划中,append local sort data 是对于搜索来的数据进行局部排序,append sstable 是把它们再全局排序加入到sstable ,这样子理解正确吗?另外,全局索引构建的过程中,会不会有局部索引这样的中间结果?

在开源版ob中,全局索引的构建是将源表数据按照目标索引表切成多个range,每个range自己排序,所有range拼接起来依然有序。在局部索引的构建过程中,有局部排序再归并的过程。

https://open.oceanbase.com/blog/8600126,我在这篇博客中详细介绍了索引构建的代码流程,可以对照着代码看下具体细节。