如何解决Clickhouse二级索引是否类似于MySQL普通索引?
我对何时使用二级索引有点困惑。我有以下代码脚本来定义一个 MergeTree 表,该表有十亿行。
create table t_mt(
id UInt8,name String,job String,birthday Date,salary UINT8
) engine = MergeTable
primary key id
order by (id)
我将实时运行以下聚合查询:
select job,count(1),avg(salary)
from t_mt
group by job
where salary > 20000
在上面的查询中,我使用了条件过滤器:salary > 20000
和 group by job
。我想问一下在 salary
列上定义二级索引是否是一个好习惯。
我在这里要问的基本问题是我是否可以将 Clickhouse 二级索引视为 MysqL 普通索引。也就是说,如果我想按某个列进行过滤,那么我可以在该列上创建(二级)索引以加快查询速度。
解决方法
不,MySQL 使用 b-tree
索引将随机查找降低到 O(log(N))
复杂性,其中 N 是表中的行
Clickhouse 二级索引使用了另一种方法,它是数据跳过索引
当你尝试执行像 SELECT ... WHERE field [operation] values
这样的查询,其中包含来自二级索引的字段并且二级索引支持对 operation
应用的比较 field
,clickhouse 将读取二级索引粒度和尝试快速检查数据部分是否可以跳过搜索值,如果没有,则clickhouse将从数据部分读取整列粒度
因此,二级索引不适用于具有高基数的列,而分区内的数据部分之间没有单调分布
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。