记一次索引失效
公司的演示环境有个请求页面非常慢,得响应十几二十秒,需要对其进行优化.经过分析发现有个sql执行特别慢,每次都得十几秒. 而其他的类似表的数据执行只有几百毫秒.分析两者的查询sql除业务表外完全一致.使用explain分析执行计划,发现走的是全表扫描,而另一张业务表走的是索引.两张表都是只有主键索引.
猜想是否跟表的字段数量有关,遂对有问题的表进行重建,重建之后发现走的是索引,表的字段完全一致.那问题出在哪里呢?然后查看了下建表语句,发现两张表的编码格式不一致,演示环境的表用的是utf8mb4,而查询快的表用的是utf8.遂修改表和字段的默认编码为utf8,再次查询几百毫秒就出来了.
这其实就是索引失效问题,只不过不是出现在字段的不合理使用上,而是出在编码上.
注意:表的存储引擎、字段数据类型或者字符集引起的隐性转换都会导致索引失效