今天读了这几页,好难啊= =。智商不够用啊,想了好久才想明白原理。
首先要明白为什么要有前缀。完整的索引不行吗?
主要是长度的影响。一来,需要符合索引的长度的要求,二来,假如你擦着线选了比较长的索引,那么查找的效率和对建立索引时的影响想必也不好的。(这个没有做实验,书上这么说是有道理的。从原理上。)
怎么确定索引长度呢。
理想的情况,我们刚好选了长度为n,然后每次查找时都能通过索引查到唯一。所以我们需要尝试,来达到这个效果。
文章时通过,选取随机分布然后几次重复生成的数据表,通过确定长度为k时的前缀对应的行的cnt,和全部列出来的cnt比较。如果前者比较大,说明长度不够(索引越长越具体,就越和想要的效果接近。),所以增加长度 = 减少相同前缀的cnt = 精确。在递增时就在某时比较符合最终的情况。
但不可否认,总是有可能重合的。所以查找时,可能对最后结果还要判断,如果在查找时得到的不是一个而是多个,那么就需要多次查找。