在上一篇文章介绍Rollup的时候,我们有提到过Doris的前缀索引,这篇文章我们介绍下Doris的前缀索引。
首先介绍下前缀索引
首先回顾一下,在mysql中我们创建一张表之后,我们可以在某些字段上面创建索引,有单字段索引,联合索引等。在创建索引的时候,我们自主性会比较强。在doris中,只有一种普通的索引即前缀索引。(切记这里我们说的是普通索引,后面会介绍其他的索引)
那么什么是Doris的前缀索引呢?
前缀索引主要是doris中,在创建表或者Rollup的时候,从第一个字段,第二个字段,这样挨个开始数,一直数到一共36个字节为止,然后doris会根据这36个字段来自动创建索引。所以我们在查询的时候,一定要利用这36个字节来加快查询速度。在创建的表的时候,尽量把需要利用的索引字段放在前面。
这里我们列举下在字段类型里面,相关的字段对应的字节数:
序号 | 类型 | 字节数 |
1 | int | 4 |
2 | tinyint | 1 |
3 | smallint | 2 |
4 | mediumint | 3 |
5 | bigint | 8 |
6 | float | 4 |
7 | double | 8 |
8 | char | 1-255 |
9 | varchar | 1-255 |
10 | text | 1-2的16次方 |
刚才我们介绍了从做到右一共是32个字节,下面举个例子,价格某张表有如下字段
字段 | a1 | a2 | a3 | a4 | a5 | a6 | a7 |
类型 | int | bigint | bigint | bigint | int | int | varchar |
像上面这个案例,一共有7个字段,从左往右数一共32个字节,那么我们a1,a2,a3,a4,a5 就一共有32个字节了,所以我们在查询的时候,索引只能匹配到a1到a5,a6和a7是不能使用索引的。
在Doris的前缀索引里面有一个比较特殊的情况,即遇到varchar的时候,会被截断,即从左往后数,遇到varchar字段后,及时不满足32字节,后面字段也不会被加入前缀索引。举个例子:
字段 | b1 | b2 | b3 | b4 | b5 | b6 | b7 |
类型 | int | bigint | varchar(10) | bigint | int | int | varchar |
在从左往右数的时候,b3是varchar类型,那么遇到b3就会被截断,此时前缀索引只有b1,b2,b3。这时候b1+b2+b3的总字节数没有达到32字节,但是b4,b5这些也不会被doris加入前缀索引。这就是doris的前缀索引遇到varchar类型会被截断的事情。
在doris中还有一种情况,我们知道varchar类型的字节数为1-255的范围内,具体根据实际的长度为准。但是doris如果把varchar纳入前缀索引的话,则最多只能使用20个字节,也就是某个字段假设是varchar(30),那么doris的前缀索引也只使用20个字节,超过20字节的部分不被使用。
下面我们在介绍下前缀索引的利用情况
1、在sql语句中满足哪些条件才能使用前缀索引
在doris中我们一般在where条件里面才会涉及到使用前缀索引。并且doris的sql需要满足一定的条件才能使用前缀索引。具体的条件就是:
where条件里面只能是: 等于、小于、大于、小于等于、大于等于、in、between这几个条件,并且连接符必须是and
也就是说如果sql条件里面有超出上面的条件之外的条件,是不能使用前缀索引的。同时连接关系如果是or这些,也是不能使用前缀索引的。
还没有评论,来说两句吧...