首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么index_granularity *将为ClickHouse主键读取额外的2行?

为什么index_granularity *将为ClickHouse主键读取额外的2行?
EN

Stack Overflow用户
提问于 2021-01-05 03:59:27
回答 1查看 284关注 0票数 1

根据ClickHouse文档,当读取主键的单个范围时,可以读取每个数据块中最多可以读取的index_granularity * 2额外行。

为什么要增加index_granularity * 2行?我搞不懂这个。

(CounterID, Date)主键为例。在这种情况下,排序和索引可以说明如下: 全部数据:3 e,2 e,3 g,1 h,2 i,1 i,3 1,3 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]的范围内读取数据。

上面的例子表明,使用索引总是比使用完全扫描更有效。

稀疏索引允许读取额外的数据。当读取主键的单个范围时,每个数据块中最多可以读取中的额外行。

查询中的主键和索引

EN

回答 1

Stack Overflow用户

发布于 2021-01-05 07:35:05

让我们考虑一下这个例子中的边缘情况:

代码语言:javascript
复制
  CounterID:      [aaaaaaaaaaaaaaaaaaaaabcdeeeeeeeeeeeeefggggg]
  Date:           [1111111222222233331233211111222222333211111]
  Marks:           |      |      |      |      |      |      |
                  a,1    a,2    a,3    b,3    e,2    e,3    g,1
  Marks numbers:   0      1      2      3      4      5      6

条件CounterID = 'b‘的查询将读取范围[2,4]中的数据,其中只有一行是目标,但(index_granularity * 2)是额外的。

在本例中,index_granularity (它是索引标记之间的数据行数)为6。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65573080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档