[By GavinHacker]
轉載請標明出處:http://www.cnblogs.com/gavinsp/p/5513536.html
關於數據庫索引,相信大家用到最多的一定是數據庫設計和數據庫查詢,本篇深度解析一下數據庫索引的原理,涉及數據庫本身的設計原理,對設計應用的數據庫結構,和數據庫查詢也大有益處。
(一)在了解數據庫索引之前,首先了解一下數據庫索引的數據結構基礎,B+tree
B+tree 是一個n叉樹,每個節點有多個葉子節點,一顆B+樹包含根節點,內部節點,葉子節點。根節點可能是一個葉子節點,也可能是一個包含兩個或兩個以上葉子節點的節點。
B+tree的性質:
1.n棵子tree的節點包含n個關鍵字,不用來保存數據而是保存數據的索引。
2.所有的葉子結點中包含了全部關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
3.所有的非終端結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。
B+tree結構原型圖大概如下(引用):
這里還有一篇百度文庫文章可以參考 http://wenku.baidu.com/link?url=qniQ1rpN8XOlbs4Vu6pjd_7YzVOGYxmBH0TeHLJTvwQ3Qs9Ig-FJyodXSaeBc3Ap7nC6Rm9qD6We5oJL-j7vnM4Ro5Y5J7yHwCk3asL_q5e
由於B+tree的性質, 它通常被用於數據庫和操作系統的文件系統中。NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系統都在使用B+樹作為元數據索引,因為B+ 樹的特點是能夠保持數據穩定有序,其插入與修改擁有較穩定的對數時間復雜度(B+ 樹元素自底向上插入)。
(二)數據庫索引
數據庫索引是用於提高數據庫表的數據訪問速度的。
數據庫索引的特點:
a)避免進行數據庫全表的掃描,大多數情況,只需要掃描較少的索引頁和數據頁,而不是查詢所有數據頁。而且對於非聚集索引,有時不需要訪問數據頁即可得到數據。
b)聚集索引可以避免數據插入操作,集中於表的最后一個數據頁面。
c)在某些情況下,索引可以避免排序操作。
數據庫索引的存儲方式,類型,在運行時的操作原理,我制作成了下圖:
關於數據庫索引在數據庫表設計和應用查詢中所涉及的知識會在之后的文章中分享。
轉載請標明出處:http://www.cnblogs.com/gavinsp/p/5513536.html
關注我的公眾號,當然,如果你對Java, Scala, Python等技術經驗,以及編程日記,感興趣的話。
技術網站地址: vmfor.com