根据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]的范围内读取数据。上面的例子表明,使用索引总是比使用完全扫描更有效。
稀疏索引允许读取额外的数据。当读取主键的单个范围时,每个数据块中最多可以读取中的额外行。
发布于 2021-01-05 07:35:05
让我们考虑一下这个例子中的边缘情况:
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。
https://stackoverflow.com/questions/65573080
复制相似问题