mysql B+樹索引使用要點

這篇文章是自己學習mysql隨手寫的雜記,編輯混亂且不夠嚴謹,請勿參考,謝謝!

我們知道引入索引是爲了快速查詢,但是往往一個系統或者軟件引入了新的模塊、功能或者組件,雖然豐富了產品特性,但是不可以避免的提升了系統或軟件的複雜性和耦合性。因此要正確的使用索引,必須清楚其背後的原理。

B+樹索引並不是建的越多越好,因爲:

  • 空間上,B+樹的每個節點對應一個數據頁,一個頁大小爲16KB,節點越多,越佔用空間。
  • 時間上,對數據表的增、刪、改操作都可能會引起表記錄的移動和"頁分裂",而這會帶來性能損耗。

只有索引列的有序才能使用使用二分查找快速定位記錄。

二級索引B+樹中,即使查詢中使用了索引列,但實際查詢時也未必會用到列索引。mysql查詢優化器會根據表不同訪問策略的成本選擇最低的去執行真正的查詢。比如,如果二級索引進行範圍查找的記錄非常多,那麼查找完整用戶記錄則需要回表,如果全表掃描比回表的效率更高的話,會選擇全部掃描。

在二級索引中的葉子節點中,存儲的索引列+主鍵,因索引列是從小到大升序排序的,頁之間很可能物理上連續,在進行索引列範圍匹配時進行的IO是順序進行的,這就是順序IO。而回表時,需要通過主鍵查詢完整用戶記錄,但是主鍵很可能不是連續的,此時需要訪問不同且不連續的數據頁,這就造成了隨機IO。隨機IO的效率是低於順序IO的。

關於主鍵自增,爲什麼要設置自增,因爲頁中的記錄是按主鍵從小到大排序的,只有排序才能使用二分查找算法,如果主鍵不自增,爲了使頁內部記錄有序及頁之間記錄有序,則需要移動記錄,頁中空間不夠存放新記錄則還需要進行"頁分裂"。很損耗性能,因此爲了最大程度利用有序性的優勢,建議定義主鍵時自增。

什麼情況下使用索引生效?下面總結的很好,來自網上:

使用索引需要注意的點:

 

完。 

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