索引简介
- 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] 区间中的数据。
查询优化建议
- 遵循联合索引适用范围原则,根据常用程度从高到低,将字段设为排序键。
- 可以考虑建多张表,采用不同排序键已满足需求。
- 可以考虑添加物化视图的方式,对数据进行预聚合。
网友评论