2012-07-08 46 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錯誤地將其中的一個解釋爲具有百分號。