日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解

發布時間:2024/4/17 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看了很多關于索引的博客,講的大同小異。但是始終沒有讓我明白關于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或許有很多人和我一樣,沒搞清楚概念就開始研究B-Tree,B+Tree等結構,導致在面試的時候答非所問!

索引是什么?

索引是幫助MySQL高效獲取數據的數據結構。

索引能干什么?

提高數據查詢的效率。

索引:排好序的快速查找數據結構!索引會影響where后面的查找,和order by 后面的排序。

一、索引的分類

1??從存儲結構上來劃分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-test全文索引,R-Tree索引。

2??從應用層次來分:普通索引,唯一索引,復合索引

3??根據中數據的物理順序與鍵值的邏輯(索引)順序關系:聚集索引,非聚集索引。

? 1??中所描述的是索引存儲時保存的形式,2??是索引使用過程中進行的分類,兩者是不同層次上的劃分。不過平時講的索引類型一般是指在應用層次的劃分。

就像手機分類:安卓手機,IOS手機 與 華為手機,蘋果手機,OPPO手機一樣。

普通索引:即一個索引只包含單個列,一個表可以有多個單列索引

唯一索引:索引列的值必須唯一,但允許有空值

復合索引:即一個索引包含多個列

二、索引的底層實現(單值索引)

mysql默認存儲引擎innodb只顯式支持B-Tree( 從技術上來說是B+Tree)索引,對于頻繁訪問的表,innodb會透明建立自適應hash索引,即在B樹索引基礎上建立hash索引,可以顯著提高查找效率,對于客戶端是透明的,不可控制的,隱式的。

不談存儲引擎,只討論實現

Hash索引

基于哈希表實現,只有精確匹配索引所有列的查詢才有效,對于每一行數據,存儲引擎都會對所有的索引列計算一個哈希碼(hash code),并且Hash索引將所有的哈希碼存儲在索引中,同時在索引表中保存指向每個數據行的指針。

B-Tree索引(MySQL使用B+Tree)

? B-Tree能加快數據的訪問速度,因為存儲引擎不再需要進行全表掃描來獲取數據,數據分布在各個節點之中。

B+Tree索引

? 是B-Tree的改進版本,同時也是數據庫索引索引所采用的存儲結構。數據都在葉子節點上,并且增加了順序訪問指針,每個葉子節點都指向相鄰的葉子節點的地址。相比B-Tree來說,進行范圍查找時只需要查找兩個節點,進行遍歷即可。而B-Tree需要獲取所有節點,相比之下B+Tree效率更高。

結合存儲引擎來討論(一般默認使用B+Tree)

案例:假設有一張學生表,id為主鍵

idnamebirthday

1

Tom

1996-01-01

2

Jann

1996-01-04

3

Ray

1996-01-08

4

Michael

1996-01-10

5

Jack

1996-01-13

6

Steven

1996-01-23

7

Lily

1996-01-25

在MyISAM引擎中的實現

在InnoDB中的實現

三、問題

問:為什么索引結構默認使用B-Tree,而不是hash,二叉樹,紅黑樹?

hash:雖然可以快速定位,但是沒有順序,IO復雜度高。

二叉樹:樹的高度不均勻,不能自平衡,查找效率跟數據有關(樹的高度),并且IO代價高。

紅黑樹:樹的高度隨著數據量增加而增加,IO代價高。

問:為什么官方建議使用自增長主鍵作為索引。

結合B+Tree的特點,自增主鍵是連續的,在插入過程中盡量減少頁分裂,即使要進行頁分裂,也只會分裂很少一部分。并且能減少數據的移動,每次插入都是插入到最后。總之就是減少分裂和移動的頻率。

插入連續的數據:

插入非連續的數據

總結

以上是生活随笔為你收集整理的mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。