08_clickhouse主键/索引的工作机制(MergeTree的稀疏索引、索引的生成过程、索引的查询),数据标记的工作机制(数据存储、数据标记、数据查询、数据查询示例)(学习笔记)

5.主键/索引的工作机制
5.1.MergeTree的稀疏索引
5.2.索引的生成过程
5.3.索引的查询
6.数据标记的工作机制
6.1.数据存储
6.2.数据标记
6.3.数据查询
6.4.数据查询示例

5.主键/索引的工作机制

5.1.MergeTree的稀疏索引

数据按照主键排序后存储的
每个索引记录对应8192条记录(有index_grandularity指定),索引是常驻内存的。
索引是常驻内存的。
在这里插入图片描述

5.2.索引的生成过程

索引由Primary Key指定。索引数据保存在primary.idx文件中。
这里假设索引粒度(index_grandularity)为3,即每3条数据生成一条索引记录。
在这里插入图片描述

5.3.索引的查询

在这里插入图片描述

前后相邻的两个索引的值,构成索引的范围。

根据主键的查询条件,确定索引范围。
(1)、id in (‘A02’, ‘A08’), 转化为索引范围区间[A01, A04] 和 [A07, A10], 对应索引标记0和2中查询数据。。
(2)、id = ‘A04’, 在索引范围[A01, A04]和[A04, A07]区间查询数据,对应索引标记0和1。
(3)、id > ‘A11’, 在索引范围[A10, +inf]区间查询数据,对应所有值大于3的索引标记。
(4)、id like ‘A0%’, 在索引范围[A01, A04]、[A04,A07]和[A07, A10]区间查询数据,对应索 引标记为0、1和2。

6.数据标记的工作机制

6.1.数据存储

bin文件是真正存储数据的文件。
bin文件的数据是按照排序健排序后存储的。
一个bin文件由N个压缩数据块组成。
一个压缩数据块存储压缩前大小为64K~1M字节的数据。
在这里插入图片描述
在这里插入图片描述

6.2.数据标记

mkt文件是存储数据标记的文件。
存储索引标记、压缩数据块在BIN文件的偏移量、解压缩数据块的偏移量。

假设age字段,每个值占用1字节空间,在该列则一个索引粒度范围内占用8192 * 1 字节 = 8192字节 = 8KB。

每8(64KB/8KB = 8)个索引粒度,占用一个压缩数据块。

压缩数据块的切分规则:
(1)、一个压缩数据块存储压缩前大小为64K~1M 字节的数据。
(2)、按一个索引粒度为最小单位, 添加其对应的数据,用于生 成压缩数据块。
(3)、如果一个索引粒度对应的数据小于64K,则继续添加下一个索引粒度对应的数据,直至数据的大小在64K~1M之间,然后生成压缩数据块。
(4)、如果一个索引粒度对应的数据超过1M,则该批次数据将拆分为多个压缩数据块存储。
在这里插入图片描述

6.3.数据查询

1.确定分区(如果有)
2.根据primary.idx确定数据在哪些索引标记内。
3.根据索引标记和数据标记文件(.mrk或.mrk2)确定数据在哪个压缩数据块,以及在解压缩数据块中的偏移量。
4.加载数据至内存,向量化操作、过滤查询。
在这里插入图片描述

6.4.数据查询示例

在这里插入图片描述
示例1:主键查询
Where id = ‘A02’
1、使用idx索引文件定位到索引标记为0.
2、使用mrk文件,定位数据。
3、将数据加载至内存。

示例2:主键+非主键查询
where id=’A04’ and age = 20
1.使用idx索引定位到索引标记为0、1。
2.使用age字段的mrk文件,定位 到压缩数据块和数据在解压缩数 据块中的偏移量。
3.将数据加载至内存并过滤数据。

示例3:非主键查询
where age = 20
1.由于没有指定id,将定位到所有的索引标记。
2.使用age字段的mrk文件,扫描所有的压缩数据块和数据在解压缩数据块中的偏移量。这一步相当于全表扫描。
3.将数据加载至内存并过滤数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值