✅什么是反向键索引,有什么用处?

✅什么是反向键索引,有什么用处?

典型回答

✅MySQL中like的模糊查询如何优化

我们在上面的文章中讲过一种优化MySQL 中 like查询的方案,那就是将列反转然后存储并创建索引。

而 Oracle 中已经支持了一种反向键索引的方式。加入一个字段的值为"hollis_chuang",那么反向键索引就是以反转后的值作为索引的 key,即"gnauhc_silloh"。

反向键索引的主要好处就是可以优化 like 的查询性能,like “%hollis_chuang” 可以被优化成"gnauhc_silloh%",这样就可以利用最左前缀匹配进行索引精确查询了。

反向键索引还有一个好处,那就是通过反转键值的顺序,从而分散了插入点,减少了热点问题。假设有一个顺序增加的键,如1001, 1002, 1003等。在标准的B-树索引中,这些键将连续存储,可能导致特定部分的数据库页过于频繁地更新。如果使用反向键索引,则变成1001,2001和3001,这样存储的位置就更加分散一些。

在高并发插入的环境中,如热点的秒杀场景,会有非常频繁的数据插入,并且插入的数据都是连续的,那么就会出现热点块,而使用反向键索引就可以减少由于插入操作引起的I/O热点。

创建反向键索引的SQL命令如下:

CREATE INDEX my_reverse_index ON my_table(my_column) REVERSE;

但是需要注意的是,反向键索引不适合范围查询,因为键值的字节序反转后,原本连续的数值可能在物理存储上变得不连续。所以,用起来要慎重!