ClickHouse内幕(3)基于索引的查询优化
💡
原文中文,约6800字,阅读约需17分钟。
📝
内容提要
ClickHouse索引采用唯一聚簇索引的方式,对算子的执行性能有巨大提升。Sort、Distinct、聚合算子需要内存代价高、计算代价高、阻断执行pipeline,是整个查询的瓶颈算子。根据数据的有序特性,可以对这些算子进行优化。优化后,算法简化、节约内存、消除对pipeline的阻塞。优化开关:optimize_read_in_order、optimize_distinct_in_order、optimize_aggregation_in_order。
🎯
关键要点
- ClickHouse索引采用唯一聚簇索引,提升算子执行性能。
- Sort、Distinct、聚合算子是查询的瓶颈,内存和计算代价高,阻断执行pipeline。
- 优化Sort算子时,利用数据的有序性,减少内存消耗和pipeline阻塞。
- 优化开关包括:optimize_read_in_order、optimize_distinct_in_order、optimize_aggregation_in_order。
- 当order by字段与表的order by keys匹配时,可以优化Sort算子。
- 关闭read_in_order优化时,系统默认MergeSortingTransform的输入在Chunk内有序。
- Distinct算子优化时,利用有序性减少HashSet存储,提升性能。
- 聚合算子优化时,利用有序性减少Hash计算,提升计算效率。
- Sort、Distinct、聚合算子的优化在计算、内存和pipeline阻塞方面均有改善。
🏷️
标签
➡️