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阻塞方面均有改善。
➡️

继续阅读