各位大佬好,本人刚接触 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 OP @Terminator0826 都只有一行 |
![]() | 5 zeldasalor1 2023-01-21 00:07:40 +08:00 ![]() 用 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 可以建多个索引,一般把常用的并且基数大的字段作为前面的索引,这样可以过滤大部分的数据 |