mysql/oracle 索引字段-传入类型不一致导致的索引失效

背景介绍:
表:push_log
索引A:task_batch varchar(60) USING BTREE 普通索引
索引B:push_task_id int(11) USING BTREE 普通索引

执行计划解读:

走全表扫描,未使用到索引
explain select * from ol_push_log where task_batch = 1;
image.png

索引生效
explain select * from ol_push_log where task_batch = "1";
image.png


索引生效
explain select * from ol_push_log where push_task_id = 1;
image.png

索引生效
explain select * from ol_push_log where push_task_id = "1";
image.png

** 结论(基于 Mysql 5.7.18实测):
一,索引为 字符串型索引时,查询条件和字段数据类型不一致,结果隐式转换导致索引失效而全表扫描……

二,索引为 整型索引时,查询条件为整形或者String 索引都不会失效**

Leave a Comment