【性能优化】1.6 [内存查找] 内表索引

 

【性能优化】1.5 [内存查找] 多层序号定位

1.6 内表索引

序表上的索引都是针对主键的,而主键取值要求有在全表中的唯一性。如果被查找键不是主键甚至取值不唯一而无法建立为主键呢?

我们考查前面这些算法的工作原理,二分法和哈希索引都没有要求被查找键的取值在全表中有唯一性。SPL 目前没有在序表上提供非主键索引,这是为了保持序表的简单性。索引仅在数据量较大时才有意义,且经常只会用于数据只读的场景。但序表并不总是用于大数据量的场景,还常常会有改写动作,索引也要跟随更新,这非常繁琐。非主键索引还可能不止一个,序表上有太多索引会变得过于沉重,不适应小数据和更灵活的应用场景。

SPL 专门提供了由序表衍生出来的内存数据表,称为内表,主要用于较大数据量的场景,可以建立非主键索引以实现快速查找。


A

1

=200000.new(~:id,rand(100000):K,…)

2

=A1.memory()

3

=A2.index(IDX;K)

4

=A2.icursor(;K=123456;IDX).fetch()

5

=A1.icursor(;K>=123456 && K<=654321;IDX).fetch()

建立索引时要起个名字。icursor 使用相应索引查找会将结果返回成游标,之后要用 fetch 取出,这是为了让内表的索引和和外存数据表的索引保持一致。这些索引的工作原理和应用特征可以参考外存查找相关的内容。

【性能优化】2.1 [外存数据集] 文本文件分段
【性能优化】 前言及目录