2012-07-08 37 views
7

我发现一个有趣的案例在MySQL查询SQL与前缀字符串匹配;一个滑稽的案例为mysql查询“喜欢'xx'”

我创建了这样的表;

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 

然后,我插入1,000,000行数据的随机列标题,其长度小于20

我使用3个SQLS这样的:

  • 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.2S。
  • SQL#2和SQL#3的成本为0.0s。 我用%handl%的显示状态来创建查询计划,我发现SQL#1扫描所有索引数据,SQL#2和SQL#3没有。

为什么?

回答

1

表中“远”与“中”之间的距离是多少?

如果“中”是第一行看,那么只需要查看一行就可以查看第二个和第三个查询。

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

+0

这3个sqls在我的数据中都没有结果 – user1010434 2012-07-09 03:24:47

2

使用EXPLAIN来看看MySQL如何处理查询,它可能会给你一个线索。

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