数据类型搞错导致MySQL索引失效
工作中遇到了一次索引失效的情况,特此记录下来。
SQL语句:
select
*
from
t
where SN = 43000899 and UpdateTime < '2021-01-20 10:00:00' and UpdateTime > '2021-01-29 10:00:00';
其中SN和UpdateTime是一个组合索引,按照正常的逻辑来说应该是用到了这个组合索引,并且是一个range级别的,但是在程序运行时发现这条sql特别慢,使用explain检查sql,发现并没有使用到索引。
后来灵光一现,突然想起之前看过的一个知识点,数据类型错误会导致索引失效,从而进行全表扫描,于是去检查了SN的数据类型,果不其然,SN是varchar类型的,而在sql中却写成了int类型的。
正确的sql:
select
*
from
t
where SN = '94562810' and UpdateTime < '2021-01-20 10:00:00' and UpdateTime > '2021-01-29 10:00:00';
再次运行程序,发现sql可以正常的使用索引了。