Skip to content
本页内容

MySQL 查询会导致索引失效的情况



1、varchar类型字段创建了唯一索引后,如果查询传入的是数字,会导致索引失效

原因是MySQL在对比数字和字符串是否相等时,会隐式将字符串转为数字再比较,上面这种情况下,就相当于在member_token加了转数字函数,而对字段加函数直接会导致不使用索引; 反过来,如果member_token字段为数字类型,那不管查询它等于数字还是字符串,都不会使索引失效

测试数据库版本 5.7.37

sql
EXPLAIN SELECT * from member WHERE member_token = '10005'
idselect_typetabletypepossible_keyskeykey_lenrefrowsfiltered
1SIMPLEmemberconstmember_tokenmember_token242const1100.00
sql
EXPLAIN SELECT * from member WHERE member_token = 10005
idselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredextra
1SIMPLEmemberallmember_token911.11Using where