tyltr技术窝

索引下推并不是新技术,通常情况会被人忽略。索引下推是 mysql5.6 版本中对之前版中索引查询的优化方式。

mysql5.6之前是怎么进行索引查询的呢?他会首先根据索引来查找记录,再根据 where 条件进行过滤。
举例说明,存在怎么一张表

1
2
3
4
5
6
7
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT "",
`age` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我们查询年龄为18岁,且命命中是'tyltr'的用户

1
select * from `user` where age=12 and name='tyltr';

之前版本的查询是这样的:查询出所有age=18的数据,然后在使用name='tyltr'对已经查询出来的数据进行过滤。
5.6版本使用了索引下推的查询是这样的: 查询使用索引age=18的数据,同时判断是否name='tyltr',再获取数据。

看似两种区别不大,为了好理解两者的区别。那我们类比一个现实生活中的场景吧。
假如,警察局接到举报。逃犯XX窝藏在L村。警察去L抓人。

如果类比不支持索引下推的查询,警察抓人的流程是这样的。把L村所有居民统统抓到警察局,然后再警察局里一个一个的对比是不是逃犯XX。
如果是则抓获XX,不是则释放。这种做法是不是有些笨。

如果类比支持索引下推的查询,警察抓人的流程是这样的。来到L村,在L村直接判断某村民是不是逃犯XX。如果是,则进行抓捕。这样是不是效率就提高了。