like百分號前置不會走索引?NO!

“模糊查詢,前置百分號不走索引;後置百分號纔會走索引”這可能是大部分人都知道的“常識”,然而,這周在做SQL優化的時候,無意中碰到了意外情況–模糊查詢,前置百分號也走索引!

舉個栗子 表: TEST_USER 索引:INDEX_MOBILE

CREATE TABLE `TEST_USER` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `NAME` varchar(64) DEFAULT NULL COMMENT '名字',
  `MOBILE` varchar(11) DEFAULT NULL COMMENT '手機號',
  PRIMARY KEY (`ID`),
  KEY `INDEX_MOBILE` (`MOBILE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='測試的用戶表';

測試1,只查索引字段
  只查手機號

  從上面圖片中的執行計劃可以看出,查詢是走了索引的

測試2,查索引字段和主鍵
  查手機號和主鍵

  從執行計劃中看,也是走了索引的

測試3,查非索引字段
  select 索引字段和非索引字段

  從執行計劃,可以看出這次是沒有走索引的了

測試4,where後面多條件
  假如where後面,多個條件

  還是會走索引了!

結論
  從上面幾次試驗,可以得到一個結論:like查詢百分號前置,並不是100%不會走索引。如果只select索引字段,或者select索引字段和主鍵,也會走索引的。

  當然,文章說的這種情況,是比較偏的,實際工作,很少只select索引字段的,但是,知道這個,以後跟別人討論到“like百分號前置不走索引”的時候,你的內心可以是這樣了

Tips:

  文中使用的是mysq數據庫,版本5.7,沒有對其他版本mysql進行驗證,如果其他版本不適用,請留言指正!
————————————————

發佈了58 篇原創文章 · 獲贊 12 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章