mysql索引原理及聯合應用小記

  索引機制

 
mysql只是在where語句中的條件中自動建聯合索引
    order by字段不參與自動聯合索引
 可以使用explain 解析sql來看sql的可用性和優化方向
 
1.索引與查詢條件的順序沒有關係,但和索引中第一個字段有關係,只要查詢條件中包含第一個字段,type就是ref的,如果查詢語句中不包含第一個字段,但包含其他字段,也會使用到索引,但type就是index
2.索引的選擇問題,每次選擇索引都是按順序選擇的,按順序只要找到包含條件中任意字段的索引就使用了,
測試的時候條件中a,b,c都有,加了多個索引,,比如索引順序爲(a),(a,b,c),這樣的話使用(a)這個索引,
如果是(a,b)(a,b,c),(a)這樣的順序,這樣的話使用(a,b)這個索引,如果是(a,b,c),(a),(a,b)這樣的順序,這樣的話使用(a,b,c)這個索引
3.orderby的filesort問題:
使用前面的四個字段order by時,不會出現filesort。但後面兩個個在order by的時候就會出現useing filesort;
我把createDate調整到了第二,再使用order by createDate 時,就沒有useing filesort;但是把student_id調到最後。也沒有出現filesort(這個地方有些奇怪)
 
 1.實際上是使用了兩個索引的,一張表一個索引。
2.關聯索引使用了主鍵索引,resource_product表的索引type是eq_ref,resource_recommend_product表type爲index,沒有filesort
 
 
總結:
sql優化需要多嘗試,mysql沒有那麼智能。hibernate生成的sql不太靠譜,覺得需要高性能的地方或數據量大的地方直接使用sql,並且指定索引。
 
 
 
 
 

 

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