MySQL innodb索引回表操作,最左匹配

MySQL innodb索引回表操作,最左匹配

簇集索引(主键索引):索引的叶子结点存的所有字段值,

非簇集索引(非主键索引): 索引的叶子结点存的是主键字段的值

回表操作:

例子:表table 有主键 a,索引b

select  a,b,c from table where a=1  ,因为a是簇集索引有所有字段,不会回表查

select  a,b,c from table where b=1,因为b是非簇集索引只有主键a和索引b,会回表查,步骤是拿a去a的簇集索引去找到c,最后a,b,c都有了



避免:select自己需要的字段,给需要的字段建立联合索引

最左匹配:

例子如索引(name,age)  

那么

select * from emp where age =1 不会走索引

select * from emp where name='张三' 走索引

解决:建立索引(name,age) ,age

索引覆盖:
概括:只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。
常见的方法是:将被查询的字段,建立到联合索引里去。

索引下推:

例子:
如现在有个表table,有组合索引(name,age)
现在的sql:
select * from table where name like '张%' and age =20

在mysql5.6之前,执行过程是忽略age(最左匹配)使用name的索引,找到多个符合name条件的id,根据id一次次回表查数据

在mysql5.6之后,使用name索引同时,同时判断age=20,直接查出少量id回表查

猜你喜欢

转载自blog.csdn.net/qq_42011565/article/details/114253620