我在 MySQL 查询 SQL 中发现了一个带有前缀字符串匹配的有趣案例;
我创建了这样的表;
CREATE TABLE `EpgInfo` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) NULL NOT NULL DEFAUL '',
PRIMARY KEY (`id`),
KEY `title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
然后,我为长度小于 20 的随机列标题插入了 1,000,000 行数据。
我使用 3 个这样的 SQL:
- SQL #1:
select * from EpgInfo2 where title like "快" limit 1;
- SQL #2:
select * from EpgInfo2 where title = "中" limit 1;
- SQL #3:
select * from EpgInfo2 where title like "中" limit 1;
我发现:
- SQL #1 花费 0.2 秒。
- SQL #2 和 SQL #3 花费 0.0 秒。我使用 show status like
%handl%
找到查询计划,我发现 SQL #1 扫描所有索引数据,SQL #2 和 SQL #3 没有。
为什么?