更新时间:2024-05-20 GMT+08:00
UB-tree增删改查
- Insert操作:UB-tree的插入逻辑基本不变,只需增加索引插入时直接获取事务信息填写xmin字段。
- Delete操作:UB-tree额外增加了索引删除流程,索引删除主要步骤与插入相似,获取事务信息填写xmax字段(B-tree索引不维护版本信息,不需要删除操作),同时更新页面上的active_tuple_count,若active_tuple_count被减为0,则尝试页面回收。
- Update操作:对于Ustore而言,数据更新对UB-tree索引列的操作也与Astore有所不同,数据更新包含两种情况:索引列和非索引列更新,下图给出了UB-tree在数据发生更新时的处理。
上图展示UB-tree在索引列和非索引列更新的差异:
- 在非索引列更新的情况下,索引不发生任何变化,index tuple仍指向第一次插入的data tuple,Uheap不会插入新的data tuple,而是修改当下data tuple并将历史数据存入Undo中。
- 在索引列更新的情况下,UB-tree也会插入新的index tuple,但是会指向同一个data linepointer和同一个data tuple,扫描旧版本的数据则需要从Undo中读取。
- Scan操作:用户在读取数据时,可通过使用索引扫描加速,UB-tree支持索引数据的多版本管理及可见性检查,索引层的可见性检查使得索引扫描(Index Scan)及仅索引扫描(IndexOnly Scan)性能有所提升。
对于索引扫描:
父主题: Index