什么是MRR?
全称multi-range read,MySQL5.6后新特性
有student表
id(主键) | name | age |
1 | 路飞 | 18 |
2 | 索隆 | 20 |
我们对id建立索引,然后再对name建立索引。那么当我们执行select * from student where name=?时,由于索引底层数据结构的B+Tree,对name列建立的索引叫做二级索引或者副主索引,这个索引的数据存储的是id(或者唯一列、或者是6字节的row id),如下图,那么我们执行完SQL时,会从name的B+Tree中拿到id,再回到id的B+Tree中去搜索所对应的数据,这个过程叫做回表
如果改成select * from student where name>?肯定会返回一组id值,如果我们一个id一个id的去找,会很慢。这时候可以对id进行排序,这样会得到一个id的范围,可以范围查找,不用挨个去遍历了,这个过程就叫做MRR