mysql explain 特殊現象

最近看到一個問題,形如:select * from index_test whereuser_name like '%aaa%';

上面這條語句會不會用到索引呢?

根據之前的瞭解,這個是不用到的,不過還是測試下,然後建立這樣的表以及聯合索引:

CREATE TABLE `index_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(11) CHARACTER SETlatin1 DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`) USING BTREE,
  KEY `user_id_user_name_address`(`user_id`,`user_name`,`address`) USING BTREE,
  KEY `username` (`user_name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1532 DEFAULTCHARSET=utf8;

explain一下:

EXPLAIN SELECT * from index_test where user_namelike '%aaa%';


分析結果如下:


其中,key語句執行過程所用到的索引,rows爲掃描的行數,很奇怪,爲啥會用到索引,不過根據掃描行數,其實,索引並沒有起到相關作用的。

那麼,稍微修改下語句,符合索引like的向左匹配原則呢?執行下看看:

 

 

這下才是正常的。

操作表結構過程中,在address後面新增了某一字段或者在user_id,user_name,address中新增一個字段,發現對於上面的sql,explain正常了:

EXPLAIN SELECT * from index_test where user_name like '%aaa%';

 

對於出現上述現象的原因,暫時還不太清楚。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章