数据查询的优化

【详述】有一张明细表大概2.3亿的数据,指定前两个字段为排序键。在使用排序键进行查询时,执行计划中显示扫描了4700w多行数据,实际结果只有262w多条数据,排序键没有起作用
【背景】对数据查询效率的优化
【StarRocks版本】2.2.1
【集群规模】例如:1fe+3be
【附件】
建表语句


表中所有的数据量

使用explain根据tag_id查看表中tag_id = 1 数据查询的执行计划

查询tag_id = 1的数据,根据图中cardinality显示的值,说明了扫描了47663155的数据量
但是实际tag_id = 1的数据仅有2625029

如果按照两个排序键进行查询(tag_id = 1 and tag_value = ‘0’)

但实际的数据量仅有17w多点

想问下这是什么原因 ? 该如何去理解这个cardinality字段?

首先这张表没有分区,所以在查询时会命中所有的partititon,即默认的一个,另hash键为uid,所以看到用tag_id去查询时命中了所有的tablet,key的意义在于用该字段查询时可以快速找到该数据在tablet中的位置,但要有效进行数据裁剪还需要分区以及分桶的命中,可以看下这个视频https://www.bilibili.com/video/BV1SX4y1c7i4?spm_id_from=333.999.0.0&vd_source=c2888d57e2956265ac64d703df05c054

修改表结构,使用hash键使用tag_id,tag_value,
CREATE TABLE ods_origin_double_mapping_index (
tag_id int(11) NULL COMMENT “”,
tag_value varchar(50) NULL COMMENT “”,
uid int(11) NULL COMMENT “”,
real_value double NULL COMMENT “”
) ENGINE=OLAP
DUPLICATE KEY(tag_id, tag_value)
COMMENT “OLAP”
DISTRIBUTED BY HASH(tag_id, tag_value) BUCKETS 30

查询时确实只扫描了一个tablet,但是还是扫描了一半的数据量,这是什么情况?