我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。
MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。
比如对于以下的查询,无法发挥索引的最佳性能。查询一:select*fromtb1wheref1=...orderbyid desc;查询二:2. select * from tb1 where f1 = ... order by f1 asc , f2 desc;
那对于上面的查询,尤其是数据量和并发到一定峰值的时候,则对OS的资源消耗非常大。一般这样的SQL在查询计划里面会出现using filesort等状态。
比如针对下面的表t1,针对字段rank1有两个索引,一个是正序的,一个是反序的。不过在MySQL 8.0 之前的版本都是按照正序来存储。
按照rank1 正向排序的执行计划,
按照rank1 反向排序的执行计划,