7

我在 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 没有。

为什么?

4

2 回答 2

2

用于EXPLAIN查看 MySQL 如何处理查询,它可能会为您提供线索。

另外,尝试一些其他字符。也许 MySQL 将其中之一误解为其中有一个百分号。

于 2012-07-08T16:25:58.023 回答
1

“快”与“中”在表格中的“远”程度是多少?

如果“中”是查看的第一行,则第二个和第三个查询只需要查看一行。

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

于 2012-07-08T15:36:40.607 回答