CREATE TABLE `t` (
`id` int(11) NOT NULL,a
`a` varchar(10) NOT NULL,
'b' varchar(10) default null,
PRIMARY KEY (`id`),
KEY `city` (`a`)
)
假如表里有100万行数据,其中有10万行数据的a字段值是'1234567890'。
那么语句: select * from t where a='1234567890ab' 的执行流程是怎么样的?
这条查询语句执行很慢。流程如下:
1.在将条件匹配值传给执行引擎的时候,做了字符截断,只取前10个字节,即根据'1234567890'去匹配
2.匹配到满足条件的数据有10万行, 由于是select *,且二级索引没有命中全字段,所以要进行10万次回表取到全字段;
3.每次回表查出整行后,到server再次进行条件筛选,a的值都不是'1234567890ab',
4.返回结果是空。