反向索引与平时的常用索引不同的是,它将要增加索引的列的数据按字节颠倒(相当于reverse) 存放,比如要存的数据为:
12345
12346
12347
12348
反转为:
54321
64321
74321
84321
这样存的好处是:解决树的倾斜问题,而且可以解决在大量IO操作的情况下,防止硬盘在某个区域操作过于频繁,引起"热点"问题。
不适用的情况:范围查询。
适用的情况:数据是按顺序增长,如ID等。
名词解释:
树的分支:因为索引一般是按树这个数据结构来组织,所以有很多分支,把不同类别或范围的数据存放在分支里,在符合条件的分支里查询比在全表查询效率高很多。
树的倾斜:树的某个分支过与庞大,而其他分支内容却很少,这样的索引非常不健康的,查询速度也很慢,如上面的示例数据,都在10000-20000的分支,而20000-30000或者以上的分支是空的。反转后把这些数据均匀分布到不同的分支,可以使索引更加健康,也更有效率。
热点问题:由于系统在表数据的增删改查的同时,同时要承担索引开支,而这主要是硬盘的IO操作,如果树是倾斜的,而且数据的增加是按一定顺序增长的,这种情况会导致硬盘对某一固定区域操作频繁,会出现热点问题,而且出现瓶颈。
12345
12346
12347
12348
反转为:
54321
64321
74321
84321
这样存的好处是:解决树的倾斜问题,而且可以解决在大量IO操作的情况下,防止硬盘在某个区域操作过于频繁,引起"热点"问题。
不适用的情况:范围查询。
适用的情况:数据是按顺序增长,如ID等。
名词解释:
树的分支:因为索引一般是按树这个数据结构来组织,所以有很多分支,把不同类别或范围的数据存放在分支里,在符合条件的分支里查询比在全表查询效率高很多。
树的倾斜:树的某个分支过与庞大,而其他分支内容却很少,这样的索引非常不健康的,查询速度也很慢,如上面的示例数据,都在10000-20000的分支,而20000-30000或者以上的分支是空的。反转后把这些数据均匀分布到不同的分支,可以使索引更加健康,也更有效率。
热点问题:由于系统在表数据的增删改查的同时,同时要承担索引开支,而这主要是硬盘的IO操作,如果树是倾斜的,而且数据的增加是按一定顺序增长的,这种情况会导致硬盘对某一固定区域操作频繁,会出现热点问题,而且出现瓶颈。