clickhouse索引

文章目录

一、clickhouse索引

  • 以下是总结的几点关于clickhouse索引的内容

1、clickhouse可以有多个Primary Key,而且Primary Key可以任意列(值可以重复);

2、clickhouse数据默认按第一个主键排序,第一个主键相同的按第二个主键排序,依此类推;

3、clickhouse按颗粒划分区间,默认颗粒大小是8092,10M;定位到区间后,颗粒内的数据并行进入clickhouse中进行分析处理。

4、clickhouse对第一个主键使用二分查找算法,所以基于它的过滤查找很快。

5、clickhouse对基于第二个主键过滤的查询使用通用排除搜索算法,当第一个主键基数较大时,查询性能不是很理想。
基于上面的情况,可以另外创建一个Projection(按照新的主键排序),projection会另外创建一个隐藏表,show tables时不可见。隐藏表和主表自动同步数据,且查询时会自动选择适合的表。

6、clickhouse压缩率极高;列的压缩率和主键基数的顺序有很大关系。当主键基数从小到大排序时压缩性能最好(此时物理上来看,相似数据靠的很近,更有利于压缩)

7、clickhouse有时会有快速定位某一行的需求(虽然这不是clickhouse的针对应用场景),通常的做法是:为每一行生成一个UUID,然后UUID作为第一个主键,这样就可以根据UUID快速定位到某一行了。但是这样存在一个问题:每个UUID都不相同,主键基数很高不利于后面列值的压缩。所以使用局部敏感hash生成一个fingerprint,然后主键这种形式(fingerprint, UUID),再基于UUID进行查询。这样既兼顾了查询速度,又兼顾了压缩率。

猜你喜欢

转载自blog.csdn.net/qq_46480020/article/details/128231955