mysql如何优化使用索引

在mysql的innodb中数据是存在主键索引上的,通过普通索引查询出来的是主键值,之后会再跳到主键索引上去获取数据,这个过程叫回表。

例如表中为name和age创建了联合索引,查询sql为:

select * from table where name like '张%' and age=8

1、在mysql5.5版本中会根据联合索引的最左匹配原则,查询所有首字母为张的人,然后向右一个一个去回表查询age=8的人。假如姓张的有8000W个,最终满足条件的有100W人,那么就会根据索引查询8000W次,回表8000W次,最终输出100W行记录
2、在mysql5.6中,对索引查询进行了优化,会直接在联合索引中去查询age=8的主键id,这样就会根据索引查询8000W次,回表100W次,最终输出100W行记录
3、在mysql5.7中,新增了一种虚拟列,例如这个例子中可以将name的首字提出来新建一个虚拟列,然后将虚拟列和age进行联合索引,这个时候查询语句就变成了:

select * from table where 虚拟列 = '张' and age=8

索引查询就变成了100W次,回表100W次,最终输出100W行

你可能感兴趣的:(mysql)