MySql如何使用索引(二)

上篇介紹了MySql何時會嘗試使用索引,本文介紹一下我瞭解的不會使用索引的狀況, 仍然使用上次創建好的表優化

1. where 子句中like 使用了前綴通配符 %keyword

select * from test_user where name like "%Kiven%";

2. 使用>, >=, <,<=, !=,NOT IN 範圍查找或否認查找,且範圍查找時選擇的邊界查找條件範圍過大

select * from test_user where height>=180
# 不會使用索引

select * from test_user where height>=190
# 會使用索引

3. 數據類型隱式轉換

例如: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'索引

4. 不符合最左匹配原則(聯合索引)

咱們創建的索引順序是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

6. 在索引列上進行運算

select * from test_user where `height`+10=160
#是不會使用索引的,能夠寫成
select * from test_user where `height`=160-10
# 就可以使用索引了

在索引使用方面MySql自己幫咱們作了不少優化,有時候不必定會按照咱們的想法去使用索引,接下來還須要探索select

相關文章
相關標籤/搜索