mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?
謝邀~~樹懶君悉心整理了一篇索引結構方面的內容,跟各位知友分享分享~
Oracle 索引的數據結構:B-TreeOracle 數據庫使用 B-trees 存儲索引,來加速數據訪問。若沒有索引,你必須順序掃描數據來查找值。
一個值的有序列表劃分成寬塊范圍(葉子塊),查詢時間減少為 log(n)。這是 Oracle 數據庫索引的基本原則。
B-tree 索引的上半部分塊(分支塊)包含索引數據,并指向低一級的索引塊。最低級別的索引塊(葉子塊)包含每個已索引的數據值和用于定位真實行的相應 rowid。葉子塊是雙向鏈接的(雙向鏈表)。包含字符數據的列中索引是基于數據庫字符集的字符二進制值。B-tree 結構有如下優勢:樹的所有葉子塊都在相同深度,這樣,在索引中從任何地方檢索任何記錄都大約花費相同的時間。
B-tree 自動保持平衡。
All blocks of the B-tree are three-quarters full on the average.
B-tree 對大范圍查詢提供優秀的檢索性能,包括精確匹配和訪問查詢。
插入、更新和刪除操作有效,維護鍵的順序,以便快速檢索。
B-tree 性能對小表和大表都很好,不會隨著表的增長而降低。
Mysql索引的數據結構:B+Tree一般來說,索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲在磁盤上。這樣的話,索引查找過程中就要產生磁盤I/O的消耗,所以評價一個索引的優劣的重要指標就是I/O的操作次數。
數據庫系統巧妙利用了磁盤預讀原理,將一個節點的大小設為等于一個頁,這樣每個節點只需要一次I/O就可以完全載入。在實現B- Tree為了達到這個目的,實際中還需要使用如下技巧:每次新建節點時,直接申請一個頁的空間,這樣就保證一個節點物理上也存儲在一個頁里,加之計算機存儲分配都是按頁對齊的,就實現了一個node只需一次I/O。
B-Tree中一次檢索最多需要h-1次I/O(根節點常駐內存),漸進復雜度為O(h)=O(logmN)。一般實際應用中,m是非常大的數字,通常超過100,因此h非常小(通常不超過3)。Mysql索引的數據結構之所以選擇B+樹而不是B樹,是因為它內節點不存儲data,這樣一個節點就可以存儲更多的key。
此外,在非關系型數據庫中,例如Mongo的索引結構也是基于B-tree。具體原理樹懶君在這里不多做介紹啦~需要詳細有關NoSQL的索引內容,樹懶君也找了幾篇不錯的博客,請移步:MongoDB 索引
需要學習 Oracle、MySQL 中建立、刪除索引的教程也可以去本站上面學習哦~
總結
以上是生活随笔為你收集整理的mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转支交易钱到哪了啊
- 下一篇: java 方法执行结束局部变量释放_JA