上篇介紹了MySql何時會嘗試使用索引,本文介紹一下我瞭解的不會使用索引的狀況, 仍然使用上次創建好的表優化
select * from test_user where name like "%Kiven%";
select * from test_user where height>=180 # 不會使用索引
select * from test_user where height>=190 # 會使用索引
例如:name字段爲varchar類型的3d
select * from test_user where name=1
將不能使用索引,而code
select * from test_user where name='1'
可使用索引blog
緣由是當不一樣的字段類型比較時,MySql會作引式類型轉換,而 int類型的1可能等於 '01', '0001'或者 '01.e1'索引
咱們創建的索引順序是class
KEY `idx_name_height_weight` (`name`,`height`,`weight`)
因此使用的時候where子句也不能跳過前一個聯合索引列test
# 好比直接聯合索引的最後一列是不支持的 select * from test_user where weight=65
# 而使用所有索引列作查詢條件是能夠的 select * from test_user where weight=65 AND name='Tom' AND `height`=160
select * from test_user where `height`+10=160 #是不會使用索引的,能夠寫成 select * from test_user where `height`=160-10 # 就可以使用索引了
在索引使用方面MySql自己幫咱們作了不少優化,有時候不必定會按照咱們的想法去使用索引,接下來還須要探索select