ClickHouse索引查询优化

索引简介

  • clickhouse主键即索引,不同于mysql,clickhouse主键可以重复
  • clickhouse建表时可以不指定主键,但必须指定排序键,不指定主键时会隐式采用排序键作为主键。
  • clickhouse索引是一种联合索引,遵循最左前缀原则

数据查询流程

  • 数据&索引结构
    • (CounterID,Date) 作为排序键,即联合索引。
    • 标记: 即联合索引。
    • 标记号: 稀疏索引的块号。
      全部数据  :     [-------------------------------------------------------------------------]
      CounterID:     [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll]
      Date:          [1111111222222233331233211111222222333211111112122222223111112223311122333]
      标记:            |      |      |      |      |      |      |      |      |      |      |
                      a,1    a,2    a,3    b,3    e,2    e,3    g,1    h,2    i,1    i,3    l,3
      标记号:          0      1      2      3      4      5      6      7      8      9      10
    
  • 不同过滤条件查询流程
    • CounterID in ('a', 'h'),服务器会读取标记号在 [0, 3) 和 [6, 8) 区间中的数据。
    • CounterID IN ('a', 'h') AND Date = 3,服务器会读取标记号在 [1, 3) 和 [7, 8) 区间中的数据。
    • Date = 3,服务器会读取标记号在 [1, 10] 区间中的数据。

查询优化建议

  • 遵循联合索引适用范围原则,根据常用程度从高到低,将字段设为排序键。
  • 可以考虑建多张表,采用不同排序键已满足需求。
  • 可以考虑添加物化视图的方式,对数据进行预聚合。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容