赞
踩
众所周知使用innodb的表可以存在多个二级索引,但只能有一个主键索引。这主键索引满足下列要求:
主键索引索引值存储在b+树的叶子节点上,同时他还带着对应的行数据。
而二级索引索引值带的数据则是主键索引的索引值。
假设你的主键索引值是自增的id,你还设了了一个二级索引,并通过sql语句使用该二级索引查询,此时MySQL会在该索引上查询得到主键id,然后再通过主键id去查询,这就叫做回表。
回表有什么坏处呢?
回表会增加查询的步骤、降低查询效率,试想你创建了一个(name,age)的二级索引。当你通过name和age查询时,会先在二级索引上根据name得到主键并回表,回表后还要在主键索引上查询age。
可以发现回表直接导致了二级索引上的age没有被使用到,当使用索引下推后就不存在这种情况了。MySQL是默认开启索引下推的。手动开关代码如下:
set optimizer_switch='index_condition_pushdown=off'
set
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。