kudu index skip scan优化

kudu里有个优化技术叫index skip scan,其原理和EsgynDB的mdam优化技术非常相似。下面简单介绍一下其原理。假设用户的查询sql以及表结构如下:

CREATE TABLE metrics (
    host STRING,
    tstamp INT,
    clusterid INT,
    role STRING,
    PRIMARY KEY (host, tstamp, clusterid)
);

SELECT clusterid FROM metrics WHERE tstamp = 100;

查询条件落在tstamp列上,缺失了主键第一列,所以无法走到主键扫描。正常来说这条sql查询只能退化成全表扫描。但是kudu可以可以根据主键索引得到第一列host的具体值,补全第一列后再进行查询。具体流程如下:
第一次查询host=helium, tstamp=100
第二次查询host=ubuntu,tstamp=100
依次遍历所有host值,得到所有结果。

 


Index skip scan可以在缺失主键第一列的情况下,自动补全主键第一列,将全表扫描转换成多次主键扫描。在大部分情况下这样做都会有性能提升。但是显而易见如果主键第一列的取值非常多,反而会导致性能下降。据测试临界点大约是主键第一列值数量的平方等于全表总行数时。目前kudu中该优化默认开启,并且没有判断主键第一列取值数以决定是否关闭该优化的能力。这是后续需要改进的。另外目前只支持=谓词,尚且不支持范围谓词,以及IN谓词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值