当前的Clickhosue版本(ClickHouse release 21.6, 2021-06-05)支持5种跳数、稀疏索引(Data Skipping Indexes),本文介绍其使用方法。
目录导航
跳数/稀疏索引语法
在建表语句的create部分,指定跳数索引(Data Skipping Indexes),如有多个则用逗号分割。
INDEX index_name expr TYPE type(...) GRANULARITY granularity_value
- index_name : 跳数索引的名字
- expr : 计算表达式,用于索引。
- type(...) : 跳数索引类型
- granularity_value : 粒度大小,单位是引擎参数
index_granularity
。比如大小为3,则是指3个index_granularity
数据。粒度越大,跳过大片【不满足】要求的数据的效果越好,但如果太大,导致大部分都【满足】,则跳过效果较少,索引就失去效果了。
跳数/稀疏索引类型
minmax
报错的最大最小值(极值)。如下例子是2个列相乘,记录其minmax值的跳数索引。
INDEX a (u64 * i32, s) TYPE minmax GRANULARITY 3,
适合场景
SELECT count() FROM table WHERE u64 * i32 == 10
set(max_rows)
一组数量有限的(max_rows)的唯一数结果集。如下是一个字段和另一个字段长度的乘积。 最多有1000个不重复值。
INDEX b (u64 * length(s)) TYPE set(1000) GRANULARITY 4
适合场景
SELECT count() FROM table WHERE u64 * length(s) >= 1234
根据ngram切分的布隆过滤器。可用于优化 equals
, like
和 in
表达式的性能。
ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)
n
– 短语长度。size_of_bloom_filter_in_bytes
– 布隆过滤器大小,单位字节。(因为压缩得好,可以指定比较大的值,如 256 或 512)。number_of_hash_functions
– 布隆过滤器中使用的哈希函数的个数。random_seed
– 哈希函数的随机种子
样例
INDEX index_name (ID, Code) TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 5;
-- 3: token 长度,把数据切割成长度为 3 的短语
-- 256: 布隆过滤器大小
-- 2: 哈希函数个数
-- 0: 哈希函数随机种子
适合场景
where code like '%123%'
tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)
与ngrambf_v1一样,不同于 ngrams 存储字符串指定长度的所有片段。它只存储被非字母数字字符分割的片段。
INDEX d ID TYPE tokenbf_v1(256, 2, 0) GRANULARITY 5