什麼狀況下建立索引,何時不須要索引?算法
索引的種類有哪些?數據庫
索引就是幫助數據庫管理系統高效獲取數據的數據結構,就比如一本書的目錄,它能夠幫咱們快速進行特定值的定位與查找,從而加快數據查詢的效率。服務器
數據庫服務器有兩種存儲介質,硬盤和內存,存儲在內存時若是發生故障好比斷點什麼的,容易形成數據丟失,存儲在磁盤上,會有不少的IO,咱們知道磁盤IO是會耗時的,若是讓索引的數據結構儘量的減小磁盤IO操做,那麼耗時就會大大減小。數據結構
支持快速查找的數據結構有跳錶、hash表、二叉樹搜索樹,跳錶支持區間查找,hash表不支持區間查詢,二叉樹搜索樹不支持按照區間快速查詢,可是二叉樹搜索樹的不斷演進和改造知足了索引對數據結構的要求,下面來看看二叉搜索到B+樹的演進歷程。測試
二叉搜索樹是一種比較特別大的二叉樹,每一個節點的左子節點都小於父節點,右子節點大於父節點,查找一個接地那的時間複雜度是O(log2n)。搜索引擎
iShot 2020-03-05 22.55.45.png設計
可是隨着不斷往樹上添加節點,可能會形成一種現象,某一條路徑會不斷增長,最後二叉樹退化成了一個鏈表,時間複雜度變成了O(n)。blog
若是能讓左右子樹之間的高度差不大,還能繼續維持二叉搜索樹的特性,大牛們提出了平衡二叉樹這種結構,他讓每一個節點的左右子樹高度差不能超過1,這屬於嚴格平衡的,好比avl樹,可是這種嚴格平衡的樹,維護高度差須要設計複雜的算法去實現,時間成本也會增長,後來又有大牛提出,咱們不讓他嚴格平衡,高度差不要太大就行,雖然會損失一點查詢速度,可是樹的複雜性大大下降,查詢效率也能知足要求就行,這種樹就叫作紅黑樹。排序
數據查詢的時間主要依賴於磁盤 I/O 的次數,若是咱們採用二叉樹的形式,即便經過平衡二叉搜索樹進行了改進,樹的深度也是 O(log2n),當 n 比較大時,深度也是比較高的。索引
這個時候大牛又來了,那就該成多叉樹吧,多叉樹能夠下降高度,這樣就能夠減小磁盤IO次數了,給這種樹起個名字,就叫多叉平衡樹,Balance Tree。那究竟該是多少個叉呢,這個是根據內存頁大小計算出來的。
Balance Tree也就是B樹,B樹的節點是能夠存儲數據的,這樣就會形成查詢效率不穩定的狀況,有時候訪問到了非葉子節點就能夠找到關鍵字,而有時須要訪問到葉子節點才能找到關鍵字。
這個時候就又提出了B+樹,B+樹非葉子節點只存儲索引不存數據,葉子節點才存儲數據記錄,葉子節點又構成一個雙向鏈表而且從大到小順序連接。
歡迎你們去 個人博客 瞅瞅,裏面有更多關於測試實戰的內容哦!!