gpt4 book ai didi

clickhouse - Clickhouse 二级索引是否类似于 MySQL 普通索引?

转载 作者:行者123 更新时间:2023-12-05 09:32:12 29 4
gpt4 key购买 nike

我对何时使用二级索引感到困惑。我有以下代码脚本来定义 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 并按 job 分组。我会问在 salary 列上定义二级索引是否是一个好习惯。

我在这里要问的基本问题是我是否可以将 Clickhouse 二级索引视为 MySQL 普通索引。也就是说,如果我想按某些列进行过滤,那么我可以在该列上创建(二级)索引以加快查询速度。

最佳答案

不,MySQL 使用 b-tree 索引将随机查找降低到 O(log(N)) 复杂度,其中 N 是表中的行

Clickhouse 二级索引使用了另一种方法,它是数据跳过索引

当您尝试执行像 SELECT ... WHERE field [operation] values 这样的查询时,它包含来自二级索引的字段,并且二级索引支持比较 operation应用于字段,clickhouse将读取二级索引颗粒并尝试快速检查数据部分是否可以跳过搜索值,如果不是,则clickhouse将从数据部分读取整个列颗粒

因此,二级索引不适用于分区内数据部分之间没有单调分布的高基数列

查看https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexes详情

关于clickhouse - Clickhouse 二级索引是否类似于 MySQL 普通索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68346705/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com