各位大佬好,本人刚接触 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);
1
Terminator0826 2023-01-20 22:38:48 +08:00 via Android
我也用得不熟,如果只是用来检索的话应该不用关心索引的问题,感觉 clickhouse 每个字段都是索引,大数据量用哪个字段查询都不慢
|
2
dollck OP @Terminator0826 我用第一个字段查询基本几十 ms 但是其他字段要 8s
|
3
Terminator0826 2023-01-20 23:26:38 +08:00 via Android
@dollck 你第一个字段查询和其他字段查询返回的行数差别大吗
|
4
dollck OP @Terminator0826 都只有一行
|
5
zeldasalor1 2023-01-21 00:07:40 +08:00 1
用 projection, 空间换时间,飞一样的速度,两条命令很简单
https://zhuanlan.zhihu.com/p/404851831 |
6
zeldasalor1 2023-01-21 00:12:35 +08:00
而且这个是对检索自动优化的,去找过滤列对应的存储,实测好用
|
7
dollck OP @zeldasalor1 谢谢您,我会尝试一下
|
8
dollck OP @zeldasalor1 我采用了您的方法,确实奏效,感谢!
|
9
chrisliu1314 2023-01-21 22:51:53 +08:00 via iPhone
Clickhouse 可以建立二级索引的,可以看看官方文档。这里可以为 name username 分别建立二级索引
|
10
aimiyooo 2023-01-22 10:49:49 +08:00
可以建多个索引,一般把常用的并且基数大的字段作为前面的索引,这样可以过滤大部分的数据
|
11
ilylx2008 2023-01-22 21:15:47 +08:00
如果不能再加索引,可以建 3 个表,分别用不同的索引,哈哈
|
12
ilylx2008 2023-01-22 21:16:20 +08:00
不过 clickhouse 不是给高并发的场景用的
|