一、深入MySQL B + Tree索引機制
鏈接: https://pan.baidu.com/s/1YjSI2jKChUAKFfjUJVoP8w 提取碼: 900g
課程安排
索引的定義
InnoDB 是 Mysql 的默認存儲引擎(Mysql5.5.5之前是MyISAM,文檔)。InnoDB 中的所使用的是 B+tree 的數據結構,上圖中是 Hash 數據結構,不是 InnoDB 存儲引擎。
爲什麼MySQL會選擇 B + Tree 這種數據結構?
計算機科學中的樹有很多種,這裏只講幾個常見的。
數據結構模擬:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
來看看查詢算法的數據結構的演進:
二叉查找樹
二叉排序樹(Binary Sort Tree),又稱二叉查找樹(Binary Search Tree),亦稱二叉搜索樹。
平衡二叉查找樹
平衡二叉查找樹是爲了解決二叉查詢書數據不均勻而導致線性數據結構的問題而產生的。
平衡二叉搜索樹(英語:Balanced Binary Tree)是一種結構平衡的二叉搜索樹,即葉節點高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。它能在O(log n)內完成插入、查找和刪除操作,最早被髮明的平衡二叉搜索樹爲AVL樹。
常見的平衡二叉搜索樹有:
- AVL樹
- 紅黑樹
- Treap
- 節點大小平衡樹
AVL樹
在計算機科學中,AVL樹是最早被髮明的自平衡二叉查找樹。在AVL樹中,任一節點對應的兩棵子樹的最大高度差爲1,因此它也被稱爲高度平衡樹。查找、插入和刪除在平均和最壞情況下的時間複雜度都是 。增加和刪除元素的操作則可能需要藉由一次或多次樹旋轉,以實現樹的重新平衡。AVL樹得名於它的發明者G. M. Adelson-Velsky和Evgenii Landis,他們在1962年的論文《An algorithm for the organization of information》中公開了這一數據結構。
紅黑樹
紅黑樹(英語:Red–black tree)是一種自平衡二叉查找樹,是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組。它是在1972年由魯道夫·貝爾發明的,他稱之爲"對稱二叉B樹",它現代的名字是在Leo J. Guibas和Robert Sedgewick於1978年寫的一篇論文中獲得的。
平衡多路查找樹(B-Tree)
多路故名思議就是有多個分叉,上圖是以3叉爲例,也就是每個節點最多分3叉,節點上面的關鍵字個數爲:叉路數 - 1,這裏是爲2個關鍵字,那如果當關鍵字的個數超過2個時,關鍵字就會發生分裂,而後合併,使其保持2個,如下圖:
B+Tree
MySQL索引採用的是 B + Tree 數據結構
B + Tree 的特點
B + Tree 的優勢
MySQL B + Tree 具體落地形式
MySQL數據庫1個庫允許有多個存儲引擎的表,常見的就是InnoDB、Myisam。
Myisam
InnoDB
InnoDB VS Myisam
索引的幾大原則
列的離散性
最左匹配原則
聯合索引
覆蓋索引
二、MySQL 優化
鏈接: https://pan.baidu.com/s/1kWW5Jymaob1ypRsoP2xfNg 提取碼: 4wg6