OceanBase 4.3 列存存储格式和列存索引存储格式

以 t1 表和索引为例子,下面两张图说明了存储层如何存储数据。

sql 复制代码
create table t1 (id1 int, id2 int, name varchar(10), salary int, primary key(id1, id2))
with column group (each column);

create index idx  (name) storing(salary)
with column group(each column);


  1. 对于主表,主键部分总是会另存一份作为一个 column group。
  2. 对于索引表,索引列+主键列也会作为一个 column group 另存一份
  3. 上述两个 column group 里都会存一个叫做 rowid 的东西,rowid 用于在其它列中定位对应行
  4. rowid 并不是保存于每一行(上述图中仅为概念示意图),而是把 id 的范围保存在微块 meta 中。
  5. 列存的一次点查,先在 btree 里通过主键找到对应行,拿到 rowid,然后 rowid 去列里面定位对应的微块,然后用 rowid 计算微块内的偏移,定位到这个 column group 中的行数据。
  6. 在 each column 的场景中,虽然主键会组成一个 column group,但主键中的每一列,依然会作为一个独立的列再重复保存一次。这里有一定的额外存储开销。
相关推荐
观无32 分钟前
redis分布式锁
数据库·redis·分布式
Bug.Remove()35 分钟前
PostgreSQL数据类型使用
数据库·postgresql
逝水如流年轻往返染尘1 小时前
MySQL中的内置函数
数据库·mysql
咖啡啡不加糖1 小时前
深入理解MySQL死锁:从原理、案例到解决方案
java·数据库·mysql
文牧之2 小时前
PostgreSQL 的扩展pageinspect
运维·数据库·postgresql
要努力啊啊啊2 小时前
使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
数据库·人工智能·python·深度学习·自然语言处理·sqlite
KENYCHEN奉孝2 小时前
Django CMS 的 Demo
数据库·sqlite
为中华崛起而奋斗2 小时前
Oracle 19c RAC集群ADG搭建
数据库·oracle
betazhou3 小时前
mariadb5.5.56在centos7.6环境安装
android·数据库·adb·mariadb·msyql