表露的心迹 | 青训营笔记

66 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天,今天是周一,一周工作学习的开始,不论周末过得是紧张还是松懈,希望你能在新的开始中以一个崭新的面貌迎接生活的微笑与苦痛,祝你一天好心情。

ClickHouse的列存是什么样的存储架构:

ClickHouse是一种列式存储数据库系统,它使用列存储来存储数据。

列存储是一种不同于传统的行存储的存储方式,它将相同列的数据存储在一起。与行存储方式不同,列存储方式只读取所需的列,而不是整行,这可以大大提高查询性能和数据压缩率。列存储方式可以在列级别上应用压缩算法,因为数据通常在列中具有更高的重复性和更小的值域,这可以显著减少存储空间并提高读取速度。

在ClickHouse中,数据以列为单位进行存储,每个列都是由连续的数据块组成的。每个数据块都包含多个值,并使用一种压缩算法进行压缩,以减少存储空间。数据块还包含一个索引,用于快速定位特定值。

在查询数据时,ClickHouse会先从磁盘中读取所需列的数据块,然后将其解压缩,进行所需的计算和过滤,最终返回结果。由于ClickHouse只需要读取所需的列,所以它可以避免在查询时读取不必要的数据,从而提高查询性能。

总的来说,ClickHouse的列存储架构可以在大规模数据的处理和分析中提供高效的性能和良好的可扩展性。

 

ClickHouse的索引是怎么设计的:

ClickHouse支持多种类型的索引,包括主键索引、辅助索引和全文索引。

  1. 主键索引是ClickHouse中最基本的索引类型。它是一种B+树索引,用于对表中的主键列进行索引。主键索引能够提供快速的数据查找和排序,因为它是一种基于B+树的数据结构。在主键索引中,每个数据块都包含一组有序的主键值,每个主键值都关联着一个指向数据行的指针。

  2. 辅助索引是一种在ClickHouse中用于非主键列的索引。辅助索引可以用于快速查找和过滤数据,尤其是在查询中涉及到的非主键列上。辅助索引可以是全局或局部的。全局辅助索引存储在磁盘上,可以对整个表进行索引,而局部辅助索引存储在内存中,只对某些特定的数据块进行索引。

  3. 全文索引是一种在ClickHouse中用于文本列的索引。全文索引可以对文本列中的单词进行索引,并提供一些高级的文本搜索功能,如模糊搜索、通配符搜索和短语搜索。在全文索引中,文本被分解成单词,并使用一些特殊的数据结构,如倒排索引和Bloom过滤器,来加速搜索过程。

总的来说,ClickHouse的索引设计非常灵活,可以根据具体应用场景选择不同类型的索引来优化查询性能。ClickHouse还支持自适应索引设计,能够自动根据数据分布和查询模式选择最适合的索引类型。

 

ClickHouse的查询是怎么使用索引的

在 ClickHouse 中,查询优化器会尽可能地使用索引来提高查询性能。当用户执行查询时,ClickHouse 查询引擎会根据查询的 WHERE 子句和其他条件自动选择最佳索引。

具体来说,ClickHouse 查询引擎在执行查询时,会自动评估查询条件的复杂度和索引的选择,以找到最优的执行计划。当 ClickHouse 确定了最优的执行计划后,它会使用相关的索引来过滤和排序数据,从而提高查询性能。

例如,如果查询语句包含主键列的等值条件,ClickHouse 会使用主键索引来快速查找匹配的行。如果查询语句包含非主键列的等值条件,ClickHouse 会使用辅助索引来查找匹配的行。如果查询语句包含范围条件,ClickHouse 会使用范围索引来查找匹配的行。如果查询语句包含文本搜索条件,ClickHouse 会使用全文索引来查找匹配的行。

总的来说,ClickHouse 查询引擎会根据查询语句和表结构自动选择最佳索引来优化查询性能。用户无需手动指定索引,也可以获得最佳的查询性能。