老师,哪如果将搜索字段颠倒顺序呢?select b,a from table_name,不满足最左匹配的情况下,会回表吗?
你好,好问题,比如表t1 ,有 a,b,c 三个字段,a,b有联合索引,c字段没索引,如果查询是:select a,b from t1 where a=1;这种 SQL ,就可以直接通过 a,b 的联合索引树得到 b 的值,所以不需要回表;如果是:select a,c from t1 where a=1;就需要回表了。因为通过索引树得不到 c的值,必须通过索引树中的主键回表查整行数据,取出c字段的值。这个问题在第 12 节讲联合索引的时候会详细讲解。
老师,首先感谢您的耐心解答,您例子中的语句我明白了,我现在纠结的一个问题是,如果字段 a,b 是联合索引,但查询时,没有满足最左前缀原则(b,a),这种情况下,会回表操作吗?
select b,a from table_name where b=1; 如果这样,不满足最左匹配,是走不了索引的,所以一定会回表; select b,a from table_name where a=1; 如果是这样,那么不用回表了。
好的,再次感谢老师的精彩解答!
老师,关于联合索引什么情况下会回表操作的问题,麻烦您解答一下,谢谢啦!