Clickhouse 创建索引问题

2023-01-20 22:15:34 +08:00
 dollck

各位大佬好,本人刚接触 Clickhouse ,如有不对的地方请多多谅解。

是这样。我的业务表有五个字段:Email,Name,Username,Nums,Date 我们需要分别通过 Email,Name,Username 三个字段来构造过滤 所以我需要分别为这三个字段做索引

我了解到建表 order by 但只对第一个字段起效果 有方法可以实现各自索引吗?

(ps:没有时间做系统的学习,自己查过好多遍但这方面信息有点少而且找不到我要的)

十分感激

以下贴出我的建表语法

CREATE TABLE mytable
(
    Email LowCardinality(String),
    Name LowCardinality(String),
    Username LowCardinality(String),
    Nums UInt32,
    Date LowCardinality(String)
)
ENGINE = MergeTree
ORDER BY (Email,Name,Username);
1924 次点击
所在节点    数据库
12 条回复
Terminator0826
2023-01-20 22:38:48 +08:00
我也用得不熟,如果只是用来检索的话应该不用关心索引的问题,感觉 clickhouse 每个字段都是索引,大数据量用哪个字段查询都不慢
dollck
2023-01-20 23:14:44 +08:00
@Terminator0826 我用第一个字段查询基本几十 ms 但是其他字段要 8s
Terminator0826
2023-01-20 23:26:38 +08:00
@dollck 你第一个字段查询和其他字段查询返回的行数差别大吗
dollck
2023-01-20 23:27:38 +08:00
@Terminator0826 都只有一行
zeldasalor1
2023-01-21 00:07:40 +08:00
用 projection, 空间换时间,飞一样的速度,两条命令很简单
https://zhuanlan.zhihu.com/p/404851831
zeldasalor1
2023-01-21 00:12:35 +08:00
而且这个是对检索自动优化的,去找过滤列对应的存储,实测好用
dollck
2023-01-21 11:03:21 +08:00
@zeldasalor1 谢谢您,我会尝试一下
dollck
2023-01-21 18:13:32 +08:00
@zeldasalor1 我采用了您的方法,确实奏效,感谢!
chrisliu1314
2023-01-21 22:51:53 +08:00
Clickhouse 可以建立二级索引的,可以看看官方文档。这里可以为 name username 分别建立二级索引
aimiyooo
2023-01-22 10:49:49 +08:00
可以建多个索引,一般把常用的并且基数大的字段作为前面的索引,这样可以过滤大部分的数据
ilylx2008
2023-01-22 21:15:47 +08:00
如果不能再加索引,可以建 3 个表,分别用不同的索引,哈哈
ilylx2008
2023-01-22 21:16:20 +08:00
不过 clickhouse 不是给高并发的场景用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/910093

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX