刚刚看了一篇Mysql的文章上面说查询的时候使用in和or会让索引失效,所以我就去试了一下,结果就是不会失效
首先我的版本是5.7.25
select version() from dual;
这是t_zw_users这个表的索引
show index from t_zw_users;
测试
通过主键字段走的主键索引发现是不受IN和OR的影响的
EXPLAIN SELECT id,unique_id,phone_num FROM t_zw_users WHERE id IN(473377,473378,473379,473380,473386,473390,473418,473419,473437,473442) OR id=473443 OR id=473444
通过unique_id走的unique_index索引也是不受影响的
EXPLAIN SELECT * FROM t_zw_users WHERE unique_id IN(“1ad9sce5”,“1fas7ba7”,“22ds5376”,“309c17s8”,“3es26d2f”,“4842se2c”,“4c4bcs0a”,“6sb1d3ad”,“67bbc39d”,“76412999”,“7b64f5e1”) OR unique_id=“7b34f5e1” OR unique_id=“6b3425e1”
猜想
我想会不会是因为这两个字段的内容都是唯一的所以没有影响到正常的走索引
所以我重新新建了个索引
CREATE INDEX company_index ON company_audit_record (apply_company_id)
还有一种可能就是版本的问题
结果就是还是正常的走索引,没有任何影响
EXPLAIN SELECT id,apply_company_id FROM company_audit_record WHERE apply_company_id IN(40085327,40085279,40085331,40085278,40085277,40085265,40085279)OR apply_company_id=40085419 OR apply_company_id=40085413
结论
目前通过这些测试来看,结论就是5.7.25这个版本是没有问题不受影响的