表设计特殊场景怎么优化

创建表如下:
CREATE TABLE TestTable (
ID varchar(36) NOT NULL COMMENT “”,
CreateDate date NOT NULL COMMENT “”,
EndDate date NULL COMMENT “”,

) ENGINE=OLAP
PRIMARY KEY(ID, CreateDate)
PARTITION BY RANGE(CreateDate)

DISTRIBUTED BY HASH(ID) BUCKETS 4

;

原始数据最开始的时候EndDate是NULL,只要数据产生就要写入StarRocks,所以EndDate不能做key列,但是这条数据最终EndDate是不为NULL的,也就是说要通过部分列更新最终更新进去,而且也是查询的必要字段,所以这个场景很特殊,EndDate不能做分区,但查询必须得有这个字段,StarRocks目前又没有办法像MySQL那样单独创建索引,不知道大家有什么好的建议?

我们有bitmap索引和bloomfilter索引。


旧数据EndDate是NULL,是脏数据不合理,可以优化完,没有NULL就是最好的解决方案。

不行,这个是我们的业务场景,这个EndDate可以理解为结束时间,因为数据产生的时候只有创建时间,EndDate肯定是NULL,需要过一段时间这个字段才能有值,但是我们的场景是只要数据产生就得写入StarRocks,EndDate只能后面通过部分列更新过去才会有值

这个bitmap和布隆索引,date类型的没法用的,也不合适吧

时间类型如果是YYYY-MM-DD 那也合适的,这个可以用bitmap索引,如果还有时分秒就不合适了。

比起前缀索引,bitmap索引性能怎么样?其次是bitmap只能等值查询,我们是范围查询,例如:EndDate>=‘2023-01-01’ and EndDate<‘2023-09-01’

两个索引都是等值用得多,范围没有。没有什么好的方法。

前缀索引range查询时最好的,bitmap这种可能随机IO会比较多