“模糊查詢,前置百分號不走索引;後置百分號纔會走索引”這可能是大部分人都知道的“常識”,然而,這周在做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進行驗證,如果其他版本不適用,請留言指正!
————————————————