文章目錄
- ①. 索引的概述
- ②. 二叉樹和紅黑樹
- ③. Hash型別建立索引結構
- ④. B樹
- ⑤. MyISAM存盤引擎索引實作
- ⑥. InnoDB索引實作(聚集)
- ⑦. 聯合索引的設定
①. 索引的概述
-
①. 索引是幫助MySQL高效獲取資料的排好序的資料結構
-
②. mysql資料庫的實作原理通過b+樹實作的,b+樹的原理是先找到所有的資料,然后折半找到中間的資料,比它小的放左邊,大的放右邊,形成一個樹的結構,依次去進行折半,然后將剩余的資料再折半
(索引底層實作原理b+樹(二叉樹),折半查找)


- ③. 各個資料結構鏈接
②. 二叉樹和紅黑樹
- ①. 如果我們要查找89這個元素,經過兩次IO就可以獲取到(二叉樹)

- ②. 這個時候我們以Col1為例,如果要查找6,會變成一種鏈表的形式,從001開始查看一直到006查看到為止(二叉樹)

- ③. 如果我們的索引底層使用的是紅黑樹,隨著數量的增加,深度會非常大(不采取)

③. Hash型別建立索引結構
-
①. 在SQL中建立索引的時候,除了可以使用B+樹的形式,還可以使用hash的方式

-
②. 對索引的key進行一次hash計算就可以定位出資料存盤的位置
-
③. 很多時候Hash索引要比B+ 樹索引更高效
-
④. 僅能滿足 “=”,“IN”,不支持范圍查詢
-
⑤. hash沖突問題

④. B樹
-
①. 葉節點具有相同的深度,葉節點的指標為空
-
②. 所有索引元素不重復
-
③. 節點中的資料索引從左到右遞增排列

⑤. MyISAM存盤引擎索引實作
- ①. MyISAM索引檔案和資料檔案是分離的(非聚集)
非聚集:如下面的15:0x07,通過這個0x07地址找到資料表中實際的資料,需要有回表的方式

- ②. 我們使用MyISAM存盤引擎有三種檔案生成,第一個frm:表結構、MYD:表資料檔案、MYI:表索引檔案

⑥. InnoDB索引實作(聚集)
- ①. 聚集索引-葉節點包含了完整的資料記錄
- 非葉子節點不存盤data,只存盤索引(冗余),可以放更多的索引
- 葉子節點包含所有索引欄位
- 葉子節點用指標連接,提高區間訪問的性能

- ②. 為什么建議InnoDB表必須建主鍵,并且推薦使用整型的自增主鍵,而不用UUID?
- 如果沒有建立主鍵,那么mysql會默認將建表的陳述句中的不重復的列作為主鍵儲存b+樹,如果所有列都有重復資料,MYSQL會自動創建一個列出來,建立B+樹的關系,建立了主鍵,MYSQL就可以根據主鍵來展示B+樹的資料結構,
- 使用UUID能讓主鍵唯一,但是在比較時,資料很大,在底層比的是位,如果我們使用簡單的主鍵自增,一下就比較好
-
③. B樹和B+樹區別一,B+的data和索引全部在葉子節點,這樣,可以儲存更多的資料
-
④. B樹和B+樹區別二,B+樹有用指標鏈接,B樹沒有,試想,需要查詢大于20的資料,那么B+樹就可以根據折半查找找到20這個資料,再根據30儲存的箭頭找到49、50,依次這樣下去,如果換做B樹,查找49、50的時候,又需要重新進行掃描全表遍歷

⑦. 聯合索引的設定
- ①. 設定聯合索引
key ‘idx_name_age_position’ (‘name’,‘age’,‘position’) USING BTREE

- ②. 下面的只有第一條使用的索引
explain select * from employee where name='TANGZHI' and age=31;
explain select * from employee where age=30 and position='dev';
explain select * from employee where position='dev';
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292348.html
標籤:其他
下一篇:06樹和二叉樹
