B+Tree的數據結構
在算法搜索的時候會非常的高效, 這種數據結構特別合適現在的硬盤這個存儲的介質
擴展:
操作系統上的文件系統也是使用B+Tree的數據結構, 這個不區分操作系統
特點:
1.單節點可以存儲更多的元素,使得查詢磁盤IO次數更少。
2.所有查詢都要查找到葉子節點,查詢性能穩定。
3.所有葉子節點形成有序鏈表,便於范圍查詢。
總結
B+樹還有一個最大的好處,方便掃庫,B樹必須用中序遍歷的方法按序掃庫,而B+樹直接從葉子結點挨個掃一遍就完了,B+樹支持range-query非常方便,而B樹不支持。這是數據庫選用B+樹的最主要原因。
非聚(集)簇結構(MyISAM的索引結構)
主索引
主索引是不能有重復的, 我們的索引下面的數據區保存的是innode(硬盤數據區的編號). 找到索引對應的編號, 通過這個編號區數據區找到這個數據, 就把需要的數據返回給客戶端
普通索引
普通索引的值是可以重復的, 其他和主索引是一樣的
聚簇(集)結構(innodb)的索引結構
主索引
innodb索引的數據在一起的, 所以我們在創建innodb的與myisam是不一樣的, innodb必需創建主鍵ID, 必需實現auto_increment
保存索引的ID是有序增長的, 如果不是有序增加的, 當你插入一條ID小於已經存在的ID的時候, 這個時候ID就會去排序, 后面的值都會在數據區移動, 這個移動過程就會消耗IO, 后面移動的數據越大, 這個消耗就越大, 這是非常非常不好的行為
如果你不創建主鍵, 它是會自動去找一個可以作為主鍵的值, 如果沒有, 他就會隱藏的創建一個作為主鍵的值
既然它一定要有主鍵, 所以我們一定要給它創建
普通索引
普通索引下面的數據區保存的是主鍵的ID, 這些ID會在進行普通索引搜索的時候, 返回, 在返回之后, 再到主鍵索引取進行索引
這就說明, 如果Innodb你不使用主鍵索引進行查詢, 就會出現我們的二次遍歷, 第一次遍歷普通索引, 第二次遍歷主鍵索引
總結:
MyISAM的索引的索引結構都是一樣的, 主索引比其他索引就是多一個不重復的功能, 所以你在使用MySIAM的時候, 創建索引, 可以任意, 但是以數字ID進行自增長的索引,占用的長度與空間更少更小
還是建議使用auto_increment
Innodb的主鍵索引與普通索引, 完全不一樣, 主索引只要一次遍歷就可以了, 普通索引必須進行二次遍歷才能得到結果
終:
以后我們的創建表, 一定要創建主鍵, 必需是auto_increment