我在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
Run Code Online (Sandbox Code Playgroud)
然后,我为随机列标题插入了1,000,000行数据,其长度小于20.
我使用3个这样的SQL:
select * from EpgInfo2 where title like "?" limit 1;
select * from EpgInfo2 where title = "?" limit 1;
select * from EpgInfo2 where title like "?" limit 1;
我发现:
%handl%
找到查询计划,我发现SQL#1扫描所有索引数据,SQL#2和SQL#3没有.为什么?
“\xe5\xbf\xab”与“\xe4\xb8\xad”相比,进入表的“距离”有多远?
\n\n如果“\xe4\xb8\xad”是查看的第一行,则第二个和第三个查询只需查看一行。
\n\n如果另一行是最后一行,则需要扫描整个表。
\n