字段a:varchar(32),非空,默认''
字段b: varchar(32),非空,默认''
你贴一下你的表结构,索引信息,数据量大小
字段a:varchar(32),非空,默认''
字段b: varchar(32),非空,默认''
数据量现在还不多,几十条而已
@青木年华: 索引呢?而且十几条数据这个db不一定会用索引,全表扫这块开销会比走索引要快
@Daniel Cai: 嗯,第一种情况就是给ab建联合索引,第2种是给a建索引,但是同样是这么多数据,第2种情况有的用到索引有的用不到(⊙o⊙)
@青木年华: mysql的索引结构不太熟悉,但我估计如下
关于问题1你说条件只有b却走了索引,这个应该不可能,建议你再确认下
问题2你最好把数据量放大,太少的数据走索引还要从索引过一遍再找数据行,如果引擎聪明点很可能会放弃这种看似更好的方案(直接扫表开销更低)。另你需要确认下你a的分布情况,如果大部分a字段都是同一个值而你却又刚好用这个值来查询估计很大可能性db会选择扫表,相反可能会选择索引
@Daniel Cai: 第一种情况我试过了,我也觉得很奇怪,但explain sql语句,它就是用到了索引(⊙o⊙)
@青木年华: 你把你explain出来的结果铁出来看看