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,但主键中的每一列,依然会作为一个独立的列再重复保存一次。这里有一定的额外存储开销。
相关推荐
NineData17 小时前
NineData社区版 V4.6.0 正式发布!SQL 窗口新增4个数据源,新增支持OceanBase等多条数据复制和对比链路
数据库·sql·dba
IT果果日记17 小时前
给DataX配置加密的方法
大数据·数据库·后端
小白学鸿蒙17 小时前
鸿蒙数据库表中的数据如何导出为Excel存到系统下载目录
数据库·excel·harmonyos
WKP941817 小时前
mysql的事务、锁以及MVCC
数据库·mysql
那我掉的头发算什么17 小时前
【数据库】增删改查 高阶(超级详细)保姆级教学
java·数据库·数据仓库·sql·mysql·性能优化·数据库架构
雨夜赶路人18 小时前
SQL -- GROUP BY 基本语法
数据库·sql
cr7xin18 小时前
缓存查询逻辑及问题解决
数据库·redis·后端·缓存·go
何中应18 小时前
Oracle数据库安装(Windows)
java·数据库·后端·oracle
遇见你的雩风18 小时前
【MySQL】--- 视图
数据库·mysql
Thepatterraining18 小时前
大厂架构师揭秘:MySQL缓冲池为什么不用mmap?LRU-K算法详解
数据库·mysql