b+樹在資料庫中的應用
1.檔案很大,不可能全部儲存在記憶體中,故要儲存到磁碟上
2.索引的結構組織要儘量減少查詢過程中磁碟i/o的訪問次數(為什麼使用b-/+tree,還跟磁碟訪問原理有關。)
3.區域性性原理與磁碟預讀,預讀的長度一般為頁(page)的整倍數,(在許多作業系統中,頁得大小通常為4k)
4.資料庫系統巧妙利用了磁碟預讀原理,將乙個節點的大小設為等於乙個頁,這樣每個節點只需要一次i/o就可以完全載入,(由於節點中有兩個陣列,所以位址連續)。而紅黑樹這種結構,h明顯要深的多。由於邏輯上很近的節點(父子)物理上可能很遠,無法利用區域性性
innodb 與 myisam 結構上的區別
1. innodb的主鍵索引 ,myisam索引檔案和資料檔案是分離的,索引檔案僅儲存資料記錄的位址。而在innodb中,表資料檔案本身就是按b+tree組織的乙個索引結構,這棵樹的葉節點data域儲存了完整的資料記錄。這個索引的key是資料表的主鍵,因此innodb表資料檔案本身就是主索引,所以必須有主鍵,如果沒有顯示定義,自動為生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形
2. innodb的輔助索引(secondary index, 也就是非主鍵索引)也會包含主鍵列,比如名字建立索引,內部節點 會包含名字,葉子節點會包含該名字對應的主鍵的值,如果主鍵定義的比較大,其他索引也將很大
3. myisam引擎使用b+tree作為索引結構,索引檔案葉節點的data域存放的是資料記錄的位址,指向資料檔案中對應的值,每個節點只有該索引列的值
4. myisam主索引和輔助索引(secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,輔助索引可以重複,
(由於myisam輔助索引在葉子節點上儲存的是資料記錄的位址,和主鍵索引一樣,所以相對於b+的innodb可通過輔助索引
快速找到所有的資料,而不需要再遍歷一邊主鍵索引,所以適用於olap)
innodb索引和myisam索引的區別:
一是主索引的區別,innodb的資料檔案本身就是索引檔案。而myisam的索引和資料是分開的。
二是輔助索引的區別:innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址。而myisam的輔助索引和主索引沒有多大區別。
1. 索引在資料庫中的作用
在資料庫系統的使用過程當中,資料的查詢是使用最頻繁的一種資料操作。
最基本的查詢演算法當然是順序查詢(linear search),遍歷表然後逐行匹配行值是否等於待查詢的關鍵字,其時間複雜度為o(n)。但時間複雜度為o(n)的演算法規模小的表,負載輕的資料庫,也能有好的效能。 但是資料增大的時候,時間複雜度為o(n)的演算法顯然是糟糕的,效能就很快下降了。
好在電腦科學的發展提供了很多更優秀的查詢演算法,例如二分查詢(binary search)、二叉樹查詢(binary tree search)等。如果稍微分析一下會發現,每種查詢演算法都只能應用於特定的資料結構之上,例如二分查詢要求被檢索資料有序,而二叉樹查詢只能應用於二叉查詢樹上,但是資料本身的組織結構不可能完全滿足各種資料結構(例如,理論上不可能同時將兩列都按順序進行組織),所以,在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。
索引是對資料庫表 中乙個或多個列的值進行排序的結構。與在表 中搜尋所有的行相比,索引用指標 指向儲存在表中指定列的資料值,然後根據指定的次序排列這些指標,有助於更快地獲取資訊。通常情 況下 ,只有當經常查詢索引列中的資料時 ,才需要在表上建立索引。索引將占用磁碟空間,並且影響數 據更新的速度。但是在多數情況下 ,索引所帶來的資料檢索速度優勢大大超過它的不足之處。
2. b+樹在資料庫索引中的應用
目前大部分資料庫系統及檔案系統都採用b-tree或其變種b+tree作為索引結構
1)在資料庫索引的應用
在資料庫索引的應用中,b+樹按照下列方式進行組織 :
① 葉結點的組織方式 。b+樹的查詢鍵 是資料檔案的主鍵 ,且索引是稠密的。也就是說 ,葉結點 中為資料檔案的第乙個記錄設有乙個鍵、指針對 ,該資料檔案可以按主鍵排序,也可以不按主鍵排序 ;資料檔案按主鍵排序,且 b +樹是稀疏索引 , 在葉結點中為資料檔案的每乙個塊設有乙個鍵、指針對 ;資料檔案不按鍵屬性排序 ,且該屬性是 b +樹 的查詢鍵 , 葉結點中為資料檔案裡出現的每個屬性k設有乙個鍵 、 指針對 , 其中指標執行排序鍵值為 k的 記錄中的第乙個。
② 非葉結點 的組織方式。b+樹 中的非葉結點形成 了葉結點上的乙個多級稀疏索引。 每個非葉結點中至少有ceil( m/2 ) 個指標 , 至多有 m 個指標 。
2)b+樹索引的插入和刪除
①在向資料庫中插入新的資料時,同時也需要向資料庫索引中插入相應的索引鍵值 ,則需要向 b+樹 中插入新的鍵值。即上面我們提到的b-樹插入演算法。
②當從資料庫中刪除資料時,同時也需要從資料庫索引中刪除相應的索引鍵值 ,則需要從 b+樹 中刪 除該鍵值 。即b-樹刪除演算法
MySQL索引B 樹結構
b 樹在資料庫中的應用 1.檔案很大,不可能全部儲存在記憶體中,故要儲存到磁碟上 2.索引的結構組織要儘量減少查詢過程中磁碟i o的訪問次數 為什麼使用b tree,還跟磁碟訪問原理有關。3.區域性性原理與磁碟預讀,預讀的長度一般為頁 page 的整倍數,在許多作業系統中,頁得大小通常為4k 4.資...
資料庫索引為什麼B樹結構
這是乙個很深的問題,我採用逐步問答的方式來解答。試圖用最簡潔的語言解決整體概念上的問題。本文目的純粹是提供對 索引採用b樹結構 這個問題的一種入門概念,不涉及深入的東西。資料庫索引為什麼會選擇b樹結構?答 因為使用b樹查詢時,所用的磁碟io操作次數比平衡二叉樹更少,效率也更高。為什麼使用b樹查詢所用...
B 樹 樹結構之B 樹簡介
template 節點key值型別為模板型別t class bplustreenode 3.1查詢操作 3.2插入操作 首先查詢9應插入的葉節點 最左下角的那乙個 插入發現沒有破壞b 樹的性質,完畢。插完如下圖所示 首先查詢20應插入的葉節點 第二個葉子節點 插入,如下圖 發現第二個葉子節點已經破壞...