成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

終于有人將MySQL索引講清楚了

數據庫 MySQL
看了很多關于索引的博客,講的大同小異。但是始終沒有讓我明白關于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....

[[269772]]

01、前言

看了很多關于索引的博客,講的大同小異。但是始終沒有讓我明白關于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....

或許有很多人和我一樣,沒搞清楚概念就開始研究B-Tree,B+Tree等結構,導致在面試的時候答非所問!

索引是什么?

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

索引能干什么?

提高數據查詢的效率。

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

02、索引的分類

  1. 從存儲結構上來劃分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。
  2. 從應用層次來分:普通索引,唯一索引,復合索引
  3. 根據中數據的物理順序與鍵值的邏輯(索引)順序關系:聚集索引,非聚集索引。

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

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

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

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

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

聚簇索引(聚集索引):并不是一種單獨的索引類型,而是一種數據存儲方式。具體細節取決于不同的實現,InnoDB的聚簇索引其實就是在同一個結構中保存了B-Tree索引(技術上來說是B+Tree)和數據行。

非聚簇索引:不是聚簇索引,就是非聚簇索引(認真臉)。

03、索引的底層實現

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

Hash索引

基于哈希表實現,只有精確匹配索引所有列的查詢才有效。

對于每一行數據,存儲引擎都會對所有的索引列計算一個哈希碼(hash code),并且Hash索引將所有的哈希碼存儲在索引中,同時在索引表中保存指向每個數據行的指針。

終于有人將 MySQL 索引講清楚了

 

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

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

終于有人將 MySQL 索引講清楚了

 

B+Tree索引

是B-Tree的改進版本,同時也是數據庫索引所采用的存儲結構。

數據都在葉子節點上,并且增加了順序訪問指針,每個葉子節點都指向相鄰的葉子節點的地址。

相比B-Tree來說,進行范圍查找時只需要查找兩個節點,進行遍歷即可。而B-Tree需要獲取所有節點,相比之下B+Tree效率更高。

終于有人將 MySQL 索引講清楚了

 

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

 

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

id name birthday
001 Tom 1996-01-01
002 Jann 1996-01-04
003 Ray 1996-01-08
004 Michael 1996-01-10
005 Jack 1996-01-13
006 Steven 1996-01-23
007 Lily 1996-01-25

在MyISAM引擎中的實現(二級索引也是這樣實現的)

終于有人將 MySQL 索引講清楚了

 

在InnoDB中的實現

[[269773]]

 

終于有人將 MySQL 索引講清楚了

 

04、問題

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

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

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

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

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

結合B+Tree的特點,自增主鍵是連續的,在插入過程中盡量減少頁分裂,即使要進行頁分裂,也只會分裂很少一部分。

并且能減少數據的移動,每次插入都是插入到***??傊褪菧p少分裂和移動的頻率。

插入連續的數據:

終于有人將 MySQL 索引講清楚了

 

插入非連續的數據

終于有人將 MySQL 索引講清楚了 

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2020-07-29 09:21:34

Docker集群部署隔離環境

2021-07-05 22:22:24

協議MQTT

2024-04-01 10:09:23

AutowiredSpring容器

2020-12-24 15:18:27

大數據數據分析

2023-08-14 11:35:16

流程式轉化率數據指標

2021-04-10 10:37:04

OSITCP互聯網

2020-10-16 17:20:21

索引MySQL數據庫

2021-01-29 10:50:04

數據中臺數據數據管理

2024-02-23 08:08:21

2022-01-05 09:27:24

讀擴散寫擴散feed

2020-04-23 10:21:57

Linux 網絡編程 數據

2019-05-22 08:43:45

指令集RISC-V開源

2024-02-27 14:27:16

2022-07-04 11:27:02

標簽數據指標標簽體系

2021-04-21 10:00:08

MySQL索引數據庫

2023-05-29 13:59:00

GPTOpenAI監督微調

2019-06-19 14:58:38

服務器負載均衡客戶端

2024-07-01 13:45:18

2019-07-04 09:13:04

中臺百度團隊

2021-02-25 08:21:38

高可用風險故障
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在线视频 | 中文字幕一区二区三区四区五区 | 国产精品久久久久久影院8一贰佰 | 成人三级视频在线观看 | 欧美一级大片免费看 | 色综合天天网 | 亚洲网站在线观看 | 在线免费看黄 | 精品欧美乱码久久久久久 | 国产一区二区三区在线看 | 欧美日一区二区 | 一区二区在线 | 国产wwwcom| 美女福利网站 | 国产精品久久久久久久一区二区 | 精品国产伦一区二区三区观看方式 | 黄色网页在线 | av男人的天堂av | 又黑又粗又长的欧美一区 | av网站在线播放 | 二区高清| 精品国产青草久久久久福利 | 亚洲欧美日韩一区二区 | 国产一区二区三区日韩 | 91精品中文字幕一区二区三区 | 草比网站 | 91精品国产91久久久久久三级 | 国产视频福利 | 午夜在线视频 | 久久国产精品-久久精品 | 免费观看a级毛片在线播放 黄网站免费入口 | 夜夜草导航 | 91精品久久久久久久久 | 视频一区 亚洲 | 91私密视频 | 国产 日韩 欧美 在线 | 国产97人人超碰caoprom | 国产一区二区 | 中国一级特黄毛片大片 | 免费黄视频网站 | 国产精品久久久久久吹潮日韩动画 |