一个有趣的案例,对于mysql查询"喜欢'xx'"

use*_*434 7 mysql sql

我在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:

  • 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.0s.我使用show status喜欢%handl%找到查询计划,我发现SQL#1扫描所有索引数据,SQL#2和SQL#3没有.

为什么?

Hog*_*gan 1

“\xe5\xbf\xab”与“\xe4\xb8\xad”相比,进入表的“距离”有多远?

\n\n

如果“\xe4\xb8\xad”是查看的第一行,则第二个和第三个查询只需查看一行。

\n\n

如果另一行是最后一行,则需要扫描整个表。

\n