starRocks如何创建索引提高查询效率

【详述】公司要对一个几千万数据的表多条件查询,但是查询条件不是primary Key联合主键,查询很慢,想提升查询速度,请教该如何处理能提升查询速度
【StarRocks版本】例如:2.0.4
【建表语句】
CREATE TABLE src_child_part (
id varchar(65533) NULL COMMENT “”,
vin varchar(65533) NULL COMMENT “”,
create_time int(11) NULL COMMENT “”,
child_id varchar(65533) NULL COMMENT “”,
partName varchar(65533) NULL COMMENT “”,
partNameMerge varchar(65533) NULL COMMENT “”,
partNumberFormatted varchar(65533) NULL COMMENT “”,
partNumberNormallized varchar(65533) NULL COMMENT “”,
quantity varchar(65533) NULL COMMENT “”,
description varchar(65533) NULL COMMENT “”,
codeValidity varchar(65533) NULL COMMENT “”,
calloutid varchar(65533) NULL COMMENT “”,
partimgurl varchar(65533) NULL COMMENT “”,
es2KeyName varchar(65533) NULL COMMENT “”,
txtFootNoteInfo varchar(65533) NULL COMMENT “”
) ENGINE=OLAP
UNIQUE KEY(id, vin, create_time)
COMMENT “OLAP”
DISTRIBUTED BY HASH(id) BUCKETS 5
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”
);
【问题描述】 目前创建的联合主键表,联合主键为:id,vin,create_time。
现在查询条件为:vin,child_id(随机生成的uuid),partNumberNormallized,此三个条件查询这几千万的表速度上比较慢(未来不排除会有其他字段的查询条件)。请教该如何处理能提升这几千万数据量的查询速度

麻烦贴一个查询语句,做下参考。简单的where条件查询吗?

SELECT * from ods.src_benz_child_part
where vin = ‘4JGBF2FE1CA771115’
and child_id =‘05398597a3bd4ae786b072cdc5fa5878’
and partNumberNormallized = ‘A005997190’;

好的,目前查询时间多少?期望提升到多少?另外你的id、vin字段(存的是什么),这两个字段如果能用整型存改成整型

数据模型这块看您建表是更新模型,更新频率高的话建议改用主键模型

目前这个表数据又2千500多万,id这个表的id是uuid,生成的唯一标识,vin是车的某个汽车的唯一识别码简称车的id,是字母+数字组成的vin。不好用整形,之前用的就是主键模型只有id是主键,但是后来发现需要根据vin查询和删除操作太慢了,就用了id+vin+create_time三个字段弄成了联合主键。现在那些Java开发的兄弟又要用vin + child_id + partNumberNormallized 三个字段为条件查询,说有点慢,我刚开始打开dbeaver软件执行上面的sql查询用了2分多中,后面我在查的时候就比第一次快了但是还是想问下有没有其他啥方法让查询速度提升的更快一下,希望大佬能指点一下

这个表每日百万的数据量增长着

目前建议:改用主键模型,增加分区字段(一般选用时间,索引是根据分区进行加载的),分区建议在100g左右,Tablet建议在100M-1G,这两个部分要合理的设置。 distribute by hash 可以设置成组合列。unique模型本身架构merge on read,查询就是会特别慢。

key字段把int类型的放在前面

主键模型是不是也可以做联合主键

想这样建主键模型,并且是联合主键可以吗

您好,是可以的。

主键模型的联合主键必须都是int类型吗,varchar类型可以吗,因为vin码不是纯数字

可以,我本地测过了,不过联合主键的时候建议把int类型放在varchar之前 会有一定的加速效果,具体原理解释可以看官网对于主键索引这块的介绍

麻烦问下,我用了联合主键,位置顺序是主键1,主键2,主键3,3个联合主键。如果我查询的时候只用了2,3组合,或者只用到了3一个主键,而不是排第一的那个主键,请问着索引还正常起作用吗,在查询的时候,谢谢

参考这个部分了解一下https://docs.starrocks.com/zh-cn/main/table_design/Sort_key#%E6%8E%92%E5%BA%8F%E5%88%97%E7%9A%84%E5%8E%9F%E7%90%86

这个问题感觉比较普遍,也就是不管什么模式,都会涉及where过滤条件不在DISTRIBUTED里面的,看都是2分钟时间是无法接受的,希望能够持续更新呀!
我们这边也马上在用类似的场景,比较关注楼主的优化情况呀!