ClickHouse 的主键设置

本贴最后更新于 2314 天前,其中的信息可能已经东海扬尘

概况

ClickHouse 的主键是稀疏索引。

存储结构

本段落来自于参考一。参考一写的非常好,这里原文转载。

在 CK 里,主键索引用的并不是 B 树,而是稀疏索引。

如图,在一个表的分区里,包括如下数据文件:

  • 校验值
  • 列名
  • 列.mrk
  • 列.bin
  • 主键

它们的关系如下:

  • 每隔 8192 行数据,是 1 个 block
  • 主键会每隔 8192,取一行主键列的数据,同时记录这是第几个 block
  • 查询的时候,如果有索引,就通过索引定位到是哪个 block,然后找到这个 block 对应的 mrk 文件
  • mrk 文件里记录的是某个 block 的数据集,在整列 bin 文件的哪个物理偏移位置
  • 加载数据到内存,之后并行化过滤

这里分别举例看看是否依赖最左原则

  • 在使用半主键的时候,如果出现了索引跳跃,即直接用了 y 字段,跳过 x,实际上也是可以有一些数据过滤的,但是效果并不是很好
  • 所以你说这是最左原则还是不是呢?

索引使用建议

  • 索引第一列为 date 字段,来限制过滤的数据行
  • 索引第二列为其它查询的必传项

参考

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...