慢查询之当数据列是字符串类型,而查询参数是数字型时,不会使用索引
今天排查一个慢查询,想到了这篇文章:冯老师的困惑 —— 一个跑了两年的 BUG,详情如下
字段为 varchar 类型

当查询参数为 int 类型时,执行计划的索引使用情况

将查询参数改为字符串时

查询时间明显改善,降为 0.016s
测试完后,修改代码,$id 包裹上双引号

本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
在先后两个公司,都遇到过这个问题, 而且都是在附件表的 attachmentable_id 上出现了这个问题, 字段是 varchar,而查询的时候默认是 int,最终导致查询结果不走索引,而附件表大多数时候比业务表还大,而且查询起来也很频繁,问题频出,第一次遇到的时候,也是没想到这个会影响,后面追本溯源,查找 MySQL 手册 的时候,上面确实提到了这个情况。
隐式转换,这个问题很老了,十几年前,我踩过这个坑,很早之前的版本就有这个说明了,目前官方文档最低是5.7,下面5.7有关说明。
dev.mysql.com/doc/refman/5.7/en/my....