最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL?Innodb索引機制詳細介紹

 更新時間:2021年11月22日 14:53:59   作者:玉樹臨風  
這篇文章介紹了MySQL?Innodb索引數(shù)據(jù)結構工作原理。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、什么是索引

索引是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結構。

2、索引有哪些數(shù)據(jù)結構

  • 順序查找結構:這種查找效率很低,復雜度為O(n)。大數(shù)據(jù)量的時候查詢效率很低。
  • 有序的數(shù)據(jù)排列:二分查找法又稱折半查找法。

通過一次比較,將查找區(qū)間縮小一半。而MySQL中的數(shù)據(jù)并不是有序的序列。

  • 二叉查找樹:左子樹的鍵值總是小于根的鍵值,右子樹的鍵值總是大于根的鍵值。通過中序遍歷得到的序列是有序序列,但如果二叉查找樹構造的不好則跟順序查找沒什么區(qū)別

  • 平衡二叉樹:如果需要二叉查找樹是平衡的,從而引出平衡二叉樹。平衡二叉樹首先得滿足二叉查找樹的定義,其次必須滿足任何結點的兩個子樹的高度的最大差為1。顯然上面的樹不是平衡二叉樹,平衡二叉樹示例如下:

平衡二叉查找樹的時間復雜度為O(logN),查詢速度的確很快,但是維護一顆平衡二叉樹的代價也是非常大的。通常來說,需要一次或多次左旋和右旋來得到插入或更新后的平衡性。

  • B樹:B樹和平衡二叉樹稍有不同的是B樹屬于多叉樹又名平衡多路查找樹:
  1. 根節(jié)點至少有兩個子節(jié)點(每個節(jié)點有M-1個Key, 且以升序排列) 其它節(jié)點至少有M/2個子節(jié)點
  2. 葉子結點都在同一層。
  • B+樹

B+樹是B樹的變種,B+樹由B樹和索引順序訪問方法演化而來(在現(xiàn)實生活中幾乎沒有使用B樹的情況來)。
B+樹是為磁盤或其他直接存儲輔助設備設計的一種平衡查找樹。
在B+樹中所有記錄結點都是按鍵值的大小順序放在同一層的葉子結點上, 由各葉子節(jié)點指針進行連接。
所有查詢都要查找到葉子節(jié)點,查詢性能穩(wěn)定。
所有葉子節(jié)點形成有序鏈表,便于范圍查詢。每個葉子結點都存有相鄰葉子結點的指針,葉子結點本身依關鍵字的大小自小而大順序鏈接(雙向鏈表)

3、Innodb為什么使用B+樹做為索引

  1. 可以有效的利用系統(tǒng)對磁盤的塊讀取特性,在讀取相同磁盤塊的同時,盡可能多的加載索引數(shù)據(jù),來提高索引命中效率,從而達到減少磁盤IO的讀取次數(shù)(局部性原理與磁盤預讀)。
  2. B+樹的磁盤讀寫代價更低:B+樹的內部節(jié)點并沒有指向關鍵字具體信息的指針(只有葉子節(jié)點存儲有),因此其內部節(jié)點相對B樹更小,如果把所有同一內部節(jié)點的關鍵字存放在同一盤塊中,那么盤塊所能容納的關鍵字數(shù)量也越多,一次性讀入內存的需要查找的關鍵字也就越多,相對IO讀寫次數(shù)就降低了。
  3. B+樹的查詢效率更穩(wěn)定。由于非終結點并不是最終指向文件內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數(shù)據(jù)的查詢效率相當。
  4. B+樹支持范圍查詢,而B樹不支持

4、索引分類

從存儲結構上分類:BTree索引、Hash索引、全文索引

從應用上分類:主鍵索引、唯一索引、組合索引

從物理存儲角度:聚集索引和非聚集索引(輔助索引)

下面說說什么是聚集索引,什么是非聚集索引:

  • 聚集索引

按照每張表的主鍵構建一棵B+樹,同時葉子節(jié)點中存放的即為整張表的行記錄數(shù)據(jù)。也將聚集索引的葉子節(jié)點稱為數(shù)據(jù)頁,每個數(shù)據(jù)頁都通過一個雙向鏈表進行鏈接。

聚集索引對于主鍵的排序查找和范圍查找的數(shù)據(jù)非常快。

  • 輔助索引

除了存儲了索引列,還存儲了葉子節(jié)點的指針。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • MySQL5.7.03 更換高版本到MySQL 5.7.17安裝過程及發(fā)現(xiàn)問題解決方案

    MySQL5.7.03 更換高版本到MySQL 5.7.17安裝過程及發(fā)現(xiàn)問題解決方案

    這篇文章主要介紹了MySQL5.7.03 更換高版本到MySQL 5.7.17安裝過程及發(fā)現(xiàn)問題解決方案,需要的朋友可以參考下
    2017-08-08
  • MySQL為id選擇合適的數(shù)據(jù)類型

    MySQL為id選擇合適的數(shù)據(jù)類型

    為 id 列選擇一個好的數(shù)據(jù)類型非常重要,id 列會經(jīng)常用于做比較(例如聯(lián)合查詢的條件),以及用于查找其他列。而且,id 也經(jīng)常用于外鍵。因此,id 列的數(shù)據(jù)類型不僅僅關系自身數(shù)據(jù)表,也關系到與之關聯(lián)的其他數(shù)據(jù)表。因此,id 用何種數(shù)據(jù)類型就顯得十分重要
    2021-06-06
  • 微信公眾平臺開發(fā) 數(shù)據(jù)庫操作

    微信公眾平臺開發(fā) 數(shù)據(jù)庫操作

    這篇文章主要介紹了微信公眾平臺開發(fā) 數(shù)據(jù)庫操作的相關資料,需要的朋友可以參考下
    2016-10-10
  • MySQL5.6免安裝版環(huán)境配置圖文教程

    MySQL5.6免安裝版環(huán)境配置圖文教程

    這篇文章主要為大家詳細介紹了MySQL免安裝版環(huán)境配置圖文教程,很實用,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MySQL DATE_ADD和ADDDATE函數(shù)實現(xiàn)向日期添加指定時間間隔

    MySQL DATE_ADD和ADDDATE函數(shù)實現(xiàn)向日期添加指定時間間隔

    這篇文章主要介紹了MySQL DATE_ADD和ADDDATE函數(shù)實現(xiàn)向日期添加指定時間間隔,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 以Centos為例講解MySQL在Linux中的部署

    以Centos為例講解MySQL在Linux中的部署

    這篇文章主要介紹了以Centos為例講解MySQL在Linux中的部署,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • MySQL數(shù)據(jù)表損壞的正確修復方案

    MySQL數(shù)據(jù)表損壞的正確修復方案

    修復以損壞的MySQL數(shù)據(jù)表的實際操作在實際中是我們經(jīng)常用到的,以下的文章主要是介紹正確修復以損壞的MySQL數(shù)據(jù)表的實際操作步驟,以下就是正文的介紹,希望會給你帶來一些幫助在此方面。
    2011-01-01
  • 在MySQL中使用通配符時應該注意的問題

    在MySQL中使用通配符時應該注意的問題

    這篇文章主要介紹了在MySQL中使用通配符時應該注意的問題,主要是下劃線的使用容易引起的錯誤,需要的朋友可以參考下
    2015-05-05
  • 如何使用MySQL?Explain?分析?SQL?執(zhí)行計劃

    如何使用MySQL?Explain?分析?SQL?執(zhí)行計劃

    MySQL?提供的?EXPLAIN?工具能夠幫助我們深入了解查詢語句的執(zhí)行過程、索引使用情況以及潛在的性能瓶頸,本文將詳細介紹如何使用?EXPLAIN?分析?SQL?執(zhí)行計劃,并探討其中各個重要字段的含義以及優(yōu)化建議,感興趣的朋友一起看看吧
    2025-04-04
  • mysql表的內連和外連實戰(zhàn)記錄

    mysql表的內連和外連實戰(zhàn)記錄

    在開發(fā)中我們的業(yè)務需求有時候是復雜的,多張表聯(lián)合查詢的時候是有多種方式的,面對不同的需求,靈活使用不同的表連接方式,這篇文章主要給大家介紹了關于mysql表內連和外連的相關資料,需要的朋友可以參考下
    2024-01-01

最新評論

巩留县| 德昌县| 普兰店市| 崇左市| 雷山县| 都江堰市| 临颍县| 望江县| 鸡东县| 格尔木市| 南漳县| 阿鲁科尔沁旗| 富源县| 清水河县| 札达县| 长岭县| 修武县| 祁连县| 庆云县| 丹棱县| 乌兰县| 辉南县| 敖汉旗| 唐海县| 子长县| 梁河县| 陇南市| 织金县| 英山县| 丁青县| 巴青县| 茌平县| 海城市| 黄陵县| 定南县| 静安区| 栾城县| 丹寨县| 虎林市| 罗平县| 西城区|