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,但主键中的每一列,依然会作为一个独立的列再重复保存一次。这里有一定的额外存储开销。
相关推荐
小小菜鸡ing1 分钟前
pymysql
java·服务器·数据库
手握风云-7 分钟前
MySQL数据库精研之旅第十六期:深度拆解事务核心(上)
数据库·mysql
boonya1 小时前
Redis核心原理与面试问题解析
数据库·redis·面试
沙二原住民1 小时前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle
三毛20041 小时前
玳瑁的嵌入式日记D33-0908(SQL数据库)
jvm·数据库·sql
叫我龙翔1 小时前
【MySQL】从零开始了解数据库开发 --- 库的操作
数据库·mysql·数据库开发
没有bug.的程序员2 小时前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
GottdesKrieges2 小时前
OceanBase容量统计:租户、数据库、表大小
数据库·oceanbase
pan3035074792 小时前
mysql 回表查询(二次查询,如何检查,如何规避)
数据库·mysql
Michaelwubo3 小时前
elasticsearch-7.17.29 集群案例,k8s方式和原始方式
数据库