概况
ClickHouse 的主键是稀疏索引。
存储结构
本段落来自于参考一。参考一写的非常好,这里原文转载。
在 CK 里,主键索引用的并不是 B 树,而是稀疏索引。
如图,在一个表的分区里,包括如下数据文件:
- 校验值
- 列名
- 列.mrk
- 列.bin
- 主键
它们的关系如下:
- 每隔 8192 行数据,是 1 个 block
- 主键会每隔 8192,取一行主键列的数据,同时记录这是第几个 block
- 查询的时候,如果有索引,就通过索引定位到是哪个 block,然后找到这个 block 对应的 mrk 文件
- mrk 文件里记录的是某个 block 的数据集,在整列 bin 文件的哪个物理偏移位置
- 加载数据到内存,之后并行化过滤
这里分别举例看看是否依赖最左原则
- 在使用半主键的时候,如果出现了索引跳跃,即直接用了 y 字段,跳过 x,实际上也是可以有一些数据过滤的,但是效果并不是很好
- 所以你说这是最左原则还是不是呢?
索引使用建议
- 索引第一列为 date 字段,来限制过滤的数据行
- 索引第二列为其它查询的必传项
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于