书接上回上次说到key_len的长度。我们假设有一个表50个字段,有很多数据,大约有100G吧。我们理想化一点,每个字段一样大小。那么在其中一列上建立索引,那么执行select column from table 这样的情况如图1
图1
不用会表,索引覆盖。那么这样的话基于我们的假设,这样其实只查了1/50的总表,也就是100G的1/50,那么就是2G。所以说即使全索引扫描也是比全表快50倍。因为只查这个字段等于这个字段类比成为一个大表的小表。
那么请看我图2。特点是a和b两列数据一样,而且只有大约前几位不一样,后面都一样的特殊场景。
图2
然后给a和b分别建立索引。如图3.可能t2索引这样的写法大家觉得有点非主流。对就是不一样。他意思是只为这个字段前3个字符建立索引。为什么?因为后面的一样,没必要去浪费这些存储了。
图3
然后我们看看结果,如图4.通过上一篇的key_len的知识大家应该知道这个是怎么算的了。 可以看到部分索引的key_len是全字段索引的1/3左右。那么,继续我们刚才说的。如果我们假设有一个表50个字段,每个字段大小一样,查一个字段相当于一个表的1/50.那么这样的部分索引等于又在1/50的基础上继续缩小,那么又会得到更大的提升。
图4
不过场景使用也有条件,所以知道部分索引的人不多。有条件的可以用用。