mysql數據庫索引原理及其經常使用引擎對比

索引原理

樹數據結構及其算法簡介

B+/-樹:

- 多路搜索樹;
- 時間複雜度O(logdN);h爲節點出度,d爲深度

紅黑樹:

- 節點帶有顏色的平衡二叉樹
- 時間複雜度O(log2N);h節點出度=2

平衡二叉樹:

- 絕對平衡二叉樹,查找效率和紅黑樹基本同樣
- 可是插入和刪除的效率低於紅黑書;

查找時間複雜度

上述數據結構,由於時間複雜度是O(logdN),因此d越大,效率上越低,
同時,紅黑樹在插入和刪除的操做上有較高的效率,因此C++中Map就是紅黑樹實現的;

磁盤I/O操做

參考文章:MySQL索引背後的數據結構及算法原理[http://blog.codinglabs.org/articles/theory-of-mysql-index.html]
- 數據庫的索引空間可能很大,因此在索引的數據可能會部分存儲到磁盤空間;
- 根據O(logdN), B+/-樹的d比平二叉衡樹大,因此訪問節點的數量就越小,能夠減小IO讀寫;
- 有由於B+樹內部節點去掉了data域,因此能夠有更大的出度d,因此i/o會更少;
- 因此數據庫在的索引使用 B+樹實現;

索引類型

- 彙集索引:主鍵索引(一級索引);這種實現方式使得按主鍵的搜索十分高效
- 輔助索引(二級索引):須要檢索兩遍索引,首先檢索輔助索引得到主鍵,而後用主鍵到主索引中檢索得到記錄。

MYSQL優化

- 結構優化:
- 查詢優化:最左前綴原理
    1.範圍列能夠用到索引(必須是最左前綴),可是範圍列後面的列沒法用到索引。同時,索引最多用於一個範圍列,所以若是查詢條件中有兩個範圍列則沒法全用到索引。
    2.查詢條件中含有函數或表達式則不能使用索引

搜索引擎

類型 優勢 缺點 使用場景
InoDB 事務,行級鎖,支持失敗恢復 不支持全文搜索
MyIsAM 快速讀取 表級鎖,無事務,不支持失敗恢復
MEMORY hash算法,效率高 數據不安全
相關文章
相關標籤/搜索