mysql的索引及其資料結構

2021-10-08 05:46:33 字數 1392 閱讀 2953

mysql使用中,當業務量過大,通常會通過建立索引增加效率。
兩種索引:

索引其實是一種資料結構,在mysql中主要有兩種:

hash索引和b+ tree 索引。

兩者中hash索引是無序的,不支援範圍查詢,只適合等值查詢。

b+ 樹是一種多路平衡查詢樹,所以他的節點是有序的

(左子節點小於父節點、父節點小於右子節點),

所以對於範圍查詢的時候不需要做全表掃瞄。

兩種儲存引擎:

myisam儲存引擎:索引檔案和資料檔案是分離的,.frm是存放表

結構資料,myd是表資料。myi是存放索引,索引樹上會儲存資料

在myd檔案裡面的位置。

結構資料,.ibd存放的資料和索引。表資料檔案本身就是按b+樹

組織的乙個索引結構檔案主鍵索引葉節點包含了完整的資料記錄

聚集索引與非聚集索引:

索引b+ tree的葉子節點儲存整行資料的是主鍵索引,

也被稱之為聚簇索引。

而索引b+ tree的葉子節點儲存了主鍵的值的是非主鍵索引,

也被稱之為非聚簇索引

索引建立規則:

當建立聯合索引時,一般將使用查詢條件多的字段放在前面。

因為mysql索引查詢會遵循最左字首匹配的原則,即最左優先,

在檢索資料時從聯合索引的最左邊開始匹配。所以當我們建立

乙個聯合索引的時候,如(key1,key2,key3),相當於建立了

(key1)、(key1,key2)和(key1,key2,key3)三個索引,

這就是最左匹配原則

b+ 樹的資料結構:

大致上就是這樣,三層mysql就可以儲存千萬資料。

除了葉子節點都只訪問索引的值,葉子節點儲存索引

和主鍵值(主鍵值+資料)

常見問題:

為什麼推薦innodb表必須有主鍵?

保證會有主鍵索引樹的存在(因為資料存放在主鍵索引樹上面),

如果沒有mysql會自己生成乙個rowid作為自增的主鍵主鍵索引

為什麼推薦使用整型的自增主鍵?

一是方便查詢比較,而是新增資料的時候只需要在最後加入,

不會大規模調整樹結構,如果是uuid的話,大小不好比較,

新增的時候也極有可能在中間插入資料,會導致樹結構大規調整,

造成插入資料變慢。

mysql 資料結構 Mysql索引資料結構

mysql索引資料結構 當慢查詢時,看sql是否走索引。索引的本質 索引是幫助mysql高效獲取資料的排好序的資料結構。mysql若不建立索引,查詢某條資料時則會逐行掃瞄,每掃瞄一行資料就會做一次磁碟io。b tree 葉節點具有相同的深度,葉節點的指標為空。所有索引元素不重複。葉節點中的資料索引從...

mysql索引資料結構 mysql索引資料結構

什麼是索引?索引就是排好序的資料結構,可以幫助我們快速的查詢到資料 幾種資料結構 二叉樹 如果資料是單邊增長的情況 那麼出現的就是和鍊錶一樣的資料結構了,樹高度大 紅黑樹 在二叉樹的基礎上多了樹平衡,也叫二叉平衡樹,不像二叉樹那樣極端的情況會往乙個方向發展。同樣我們查詢6,在二叉樹中我們需要經過6個...

MySQL索引資料結構

mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。句子主幹就是索引是資料結構。資料庫查詢是資料庫的主要功能,我們都希望查詢資料的速度盡可能快,因此資料庫系統設計會從查詢的優化的角度進行優化。最基本的查詢演算法就是順序查詢,但這種複雜度為o n 查詢在資料量大的時...