1、现象
最新遇到一个奇怪的问题,有一个表类似
CREATE TABLE `t_user` (
`id` int NOT NULL,
`name` varchar(100) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`age` int,
`is_del` char(1) DEFAULT NULL COMMENT '0为正常1为删除',
`create_time` timestamp NULL DEFAULT NULL,
`update_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中有个is_del字段为char类型,存储值为'0' 或'1',并建立索引
但是查询时如果:
select * from t_user where is_del='0' and age>18;
则有2秒多,若写成:
select * from t_user where is_del=0 and age>18;
则只需0.05秒左右 相差40多倍,
看执行计划两者一致,都会用到索引,但是事实相差如此之大?
2、分析
查看文档也没发现其中原因,隐性转换一般都是字符串转换成数字类型,但是此字段本来就是字符类型无需转换,按道理写成数字才需要转换成字符比较,应该更慢,但是为何更快? 先记录一下,后面继续寻找答案