说明
指定 分区字段后,查询时,避免全表扫描,极大的提升查询效率
存储原理
在写入数据时,按照 分区键 将数据分成 不同的文件夹,文件夹内每列数据为不同的独立文件,以及创建数据的序列化索引排序记录文件。
查看
进入 default 数据库,存储数据的根目录:
cd /program/clickhouse/data/data/default/
ls
可以看到 t_student_mt 文件,该文件是 软链接,执行下面命令:
cd t_student_mt
执行结果,进入到下面目录:
/program/clickhouse/data/store/427/427416be-ca6e-40b0-8274-16beca6e00b0/
ll
执行结果如下:
20220101_2_2_0
20220102_1_1_0
以 分区字段 值 命名的文件夹,里面就是各个分区的数据
cd 20220101_2_2_0
ls
看到以下文件:
checksums.txt -- 校验文件
columns.txt -- 列信息
count.txt -- 总共行数。查询总行数会很快
data.bin -- 数据
data.mrk3 -- 标记文件
default_compression_codec.txt -- 压缩格式
minmax_create_time.idx -- 分区字段的最小、最大值
partition.dat -- 分区信息
primary.idx -- 主键信息,提升查询速度
count.txt 文件说明
该文件的内容,就是所在分区的总共行数,执行下面语句:
select count() from t_student_mt
就是读取该文件,所以查询总行数的速度很快
分区目录的命名规则
如下:
20220101_2_2_0
分以下部分:
20220101:分区 ID,由PARTITION BY字段决定。生成的方式有:- 如果未指定,就是
all - 整型:字段中的值
- 日期类型:字段中的值
- String:根据字段的值,生成的hash值
- Float:根据字段的值,生成的hash值
- 如果未指定,就是
2:最小分区块编号,从1开始,每生成一个分区,数字加12:最大分区块编号,默认等同于最小分区编号。合并后,就不同了0:合并的次数