mysql使用中關於索引的一些測試

1、序

寫在前面,本文都是我親自測試的結果,我根據結果進行的總結,對於原理不甚瞭解,請你們參考,也但願懂的朋友在下面評論,告訴我緣由。mysql

2、舉例表數據:

clipboard.png

3、總結

1.最大的原則,mysql優化器會判斷開銷,選擇開銷最小的查詢方式。

2.有索引不必定使用索引,當mysql判斷where條件沒有起到篩選做用時,即便該字段存在索引,也不會使用索引。

索引狀態:此時type有索引sql

sql:
 explain extended select * from y_user where type >0;

結果:mysql優化

clipboard.png

可是,當我修改查詢條件,測試

explain extended select * from y_user where type >1;

結果:優化

clipboard.png

能夠看到,使用了type索引。spa

3.當查詢條件中有索引和沒索引的條件同時存在時,不必定使用索引,同第2條

索引狀態:此時type有索引,nation未加索引code

sql:

explain extended select * from y_user where type >0 and nation>0;

結果: 未使用任何索引索引

固然,修改條件,仍是會使用索引type的ip

4.兩個字段同時具備索引

索引狀態:此時type有索引,nation有索引,同第2條。此外,修改查詢條件,兩個索引都有效時,選擇過濾更多結果的索引。it

5.組合索引,好比給type和nation創建組合索引,nation_type和type_nation,當兩個字段都出現且都有效時,選擇過濾更多的組合索引,好比nation條件比type過濾更多,就會選擇nation_type。

此外,組合索引有一個最左前綴原則,也就是說若是組合索引爲 a_b_c,那麼查詢時的只要出現了a或者a,b,或者abc均可以使用改組合索引。可是,不能沒有a查詢條件,也就是說最左前綴的意思是查詢條件必定要包含
組合索引最左邊的元素,而不是說查詢條件必須按照組合索引的組合順序進行查找。

6.若是有主鍵會優先使用主鍵,其次爲惟一索引,再次爲組合索引和普通索引。組合索引和普通索引沒有前後。

7.以上全部,在查詢過程當中查詢條件的順序不影響索引的使用。

相關文章
相關標籤/搜索