MySQL實戰45講學習筆記:第四講

1、索引模型

一、索引的做用:

索引的出現實際上是爲了提升數據查詢的效率,就像書的目錄同樣算法

提升數據查詢效率數據庫

二、索引模型的優缺點比較

2、InnoDB索引模型

一、二叉樹是搜索效率最高的,可是實際上大多數的數據庫存儲卻並不適用二叉樹?

一、其緣由是,索引不止在內存中,還要寫到磁盤上bash

二、N叉樹因爲在讀寫上的性能優勢,以及適配磁盤的訪問模式,已經被普遍應用在數據庫引擎中了性能

三、數據庫底層存儲的核心就是基於這些數據模型的,每碰到一個新數據庫,咱們須要先關注它的數據模型,這樣才能從離亂山給分析出數據庫的適應場景spa

四、不一樣存儲引擎的索引的工做方式並不同,而即便多個存儲引擎支持同一類型的索引,其底層的實現也可能不一樣blog

因爲InnoDB存儲引擎在MySQL數據庫中使用最爲普遍,因此下面我就覺得例,和你分析一下其中的索引模型索引

二、索引類型

主鍵索引:主鍵索引的葉子節點存的是整行的數據(聚簇索引),內存

非主鍵索引:非主鍵索引的葉子節點內容是主鍵的值(二級索引)class

三、主鍵索引和普通索引的區別:

一、主鍵索引只要搜索ID這個B+Tree便可拿到數據。效率

若是語句是 select * from T where ID=500,即主鍵查詢方式,則只須要搜索 ID 這棵 B+ 樹

二、普通索引先搜索索引拿到主鍵值,再到主鍵索引樹搜索一次(回表)

若是語句是 select * from T where k=k=5,即普通索引查詢方式,則須要先搜索 k 索引樹,獲得到 ID 的值爲 500,再到 ID 索引樹搜索一次。這個過程爲回表

也就是說,基於非主鍵索引的查詢須要多掃描一棵樹,所以,咱們在應用中應該儘可能使用主鍵查詢

3、索引維護

一、什麼是自增主鍵

自增主鍵是指自增列上定義的主鍵,插入新記錄的時候能夠不制定ID的值,系統會獲取當前ID最大值加1做爲下一條記錄的ID值

也就是說,自增主鍵的插入數據模式,正符合咱們前面提到的遞增插入的場景。每次插入一條新記錄,都是追加操做,都不涉及到挪動其餘記錄,也不會觸發葉子節點的分裂

二、數據也滿了怎麼辦?

一個數據頁滿了,按照B+Tree算法,新增長一個數據頁,叫作頁分裂,會致使性能降低。空間利用率下降大概50%。

當相鄰的兩個數據頁利用率很低的時候會作數據頁合併,合併的過程是分裂過程的逆過程。

分裂合併示意圖

 

三、主鍵長度越小,普通索引的葉子節點就越小,普通索引佔用的空間也就越小

因爲每一個非主鍵索引的葉子節點上都有主鍵的值,

一、若是用身份證號作主鍵,那麼每一個二級索引的葉子節點佔用的20個字節,

二、而若是用整型作主鍵,則只要4個字節,

三、若是是長整型則是8個字節

從性能和存儲空間方面考量,自增主鍵每每是更合理的選擇。

四、什麼場景適合直接用業務字段直接作主鍵?

一、只有一個索引;

二、改索引必須是惟一索引。

你必定看出來了,這就是典型的KV場景

因爲沒有其餘索引,因此也就不用考慮其餘索引的葉子節點大小的問題

這時候咱們就要有限考慮上一段的「儘可能使用主鍵查詢」原則,直接將這個索引設置爲主鍵,能夠避免每次查詢須要搜索兩棵樹

相關文章
相關標籤/搜索