ClickHouse性能优化:Index Pruning助你告别慢查询! 文章

InfoQ 中文2026-06-03BLOGzh作者: ClickHouse

详细信息

来源站点
InfoQ 中文
作者
ClickHouse
文章类型
BLOG
语言
zh
发布日期
2026-06-03

摘要

最快的分析查询,总是那些读取数据量最少的查询。我们深知这一点的重要性,因为事实确实如此!ClickHouse 提供了多种方法来实现这一目标。在本文中,我们将以英国房地产销售数据集为例,深入探讨三种基于索引的剪枝技术——助您精准掌握其适用场景与时机。剪枝技术 1:主索引 (Primary Index)首项剪枝技术是主键 (Primary Key),这也是创建数据表时首先需要掌握的概念之一。数据表的主键决定了数据分片 (Data Part) 内数据的排序方式。数据分片由数据粒 (Granule) 组成,每个数据粒默认包含 8,192 行。ClickHouse 的主索引 (Primary Index) 会存储 每个数据粒中首行的主键列值。如下图所示,数据按主键 C1 排序,行被组织成多个数据粒(从 g1 到 g4)。为便于理解,图中每个数据粒仅包含 3 行。主索引存储每个数据粒的首个值,例如 g1 为 10,g2 为 20,依此类推。主索引能够根据主键上的过滤条件,在数据读取之前跳过整个数据粒。例如,对于包含 WHERE C1 > 60 的查询,数据粒 g1 和 g2 将通过主索引进行剪枝,从而仅读取剩余的数据。剪枝技术 2:轻量级投影 (Lightweight Projections)我们的下一项剪枝技术是 轻量级投影,该功能最初在 ClickHouse 25.6 版本中引入,并在 ClickHouse 26.1 版本中获得了更易用的语法。ClickHouse 中的投影 (Projection) 是自动维护的隐藏表副本,它们以不同的排序方式存储,因此拥有不同的主索引。这些替代的布局能够加速那些受益于特定排序的查询。但其缺点在于,投影会在磁盘上复制基础表的数据。轻量级投影 (Lightweight projections) 的行为类似于二级索引,但无需复制完整的行。它们不存储完整的数据副本,而是仅存储其排序键以及一个指向基础表的 _part_offset 指针。这大大减少了存储开销,但意味着任何其他需要返回的列都必须从基础表读取。我们可以通过更新图表来了解其工作原理,即在 C2 

相关事件

暂无数据

相关公司

暂无数据

相关人物

暂无数据