查询优化-分区

一个表的前缀索引是id,name,date,根据date字段分成了3个分区,每个分区有30个桶;select * from id=xxx and date=20221102 会比select * from id=xxx 快吗?也就是加上date=20221102会不会只查询这个分区下的30个桶的数据?

先走分区裁剪,3个分区太少了,如果分区较多,buckets就按照be节点数就ok了。

啥意思?如果分区比比较多,比如30个,那么就先锁定date=20221102下的桶,然后再根据id=xxx去索引过滤?

数据量不大,buckets设置be节点数就好了。他是先分区裁剪date=20221102,然后再去这个分区下的桶查询id

这个样还走前缀索引吗?

会的,id是常用的where过滤条件,放在duplicate key第一位就好叻。

不太理解;比如我id就占用了36字节,key列有(id,name,date),这时候前缀索引只会包含id的字节,如果有两个个id一样(比如是key1),但是date不一样(20221101,20221102),查询条件是id=key1 and date=20221101,那么前缀索引扫描的时候还是会扫到两条数据吧

先走分区裁剪,接着走前缀索引id=key1

我理解前缀索引跟分区应该没关系吧,是不是分区裁剪之后,走前缀索引id=key1的时候,还是会扫到两条索引项,只是判断有一条索引项不在裁剪出来的分区里面就直接丢了?

首先走分区裁剪是扫描更少的文件,接着走前缀索引id是为了更快找出数据,因为只需要找id的值,直接根据id来就ok了

一张表只有一个前缀索引表,分区裁剪之后,根据id去索引表找索引项的时候,还是会扫到其他分区的索引项吧,虽然说不取这些分区的数据

已经裁剪了,那么里面的前缀索引是不是只有20221102

前缀索引表跟每个分区没有联系的吧,根据分区裁剪的时候也裁剪不了前缀索引表的内容吧

这是CBO做的事,已经裁剪知道只有20221102了,为什么还要扫描两列呢

这些有官方文档的介绍吗?没有文档有些迷糊

没有那么详细的原理,我们都是看源代码的。

好的;感谢大佬,如果有一些索引,存储结构之类的文章就更好了

可以关注微信咱们的公众号,里面很多StarRocks技术大佬的文章。

公众号具体是多少?

微信搜StarRocks