mysql的索引儲存資料結構

2021-10-08 17:46:40 字數 1358 閱讀 9428

我們mysql底層的索引儲存資料結構是按照b+樹方式來儲存的,也是從b樹結構演變而來。

我們知道索引就是類似我們的書本的目錄頁,儲存要找的內容所在的頁數。

b樹的結構:

葉節點具有相同的深度,葉節點的指標為空

所有索引元素不重複

節點中的資料索引從左到右遞增排列

b+樹的結構:

非葉子節點不儲存data,只儲存索引(冗餘),可以放更多的索引

葉子節點包含所有索引字段

葉子節點用指標連線,提高區間訪問的效能

另乙個點就是說,我們的資料儲存在磁碟檔案不一定連續的,可能是分散的存在不連續的檔案位址。因此b+樹的做法是在磁碟上劃分一塊小的空間存放很多的索引,這個叫索引頁也叫非葉子節點,預設大小為16kb,結構是索引和下乙個索引頁的檔案位址,比如我們建索引的字段型別為bigint8個位元組,檔案位址佔6個位元組,那麼這個索引頁可以儲存16kb/14b=1170個索引,假設我們葉子節點儲存的乙個索引的資料大小為1kb(所有字段大小),那麼每個葉子節點可以存16個索引的資料,假設樹的高度為2,那麼可以儲存的記錄數就是1170x1170x16=2千萬條資料左右,而且只需要做2次磁碟oi即可找到對應的資料。如果我們用

b樹儲存2千萬資料,索引樹的高度會是多少呢?

b樹的資料是和索引存放在節點上面的,那麼2千萬的資料,需要樹的高度至少大於6,要做6次磁碟io,而且讀取檔案到記憶體也占用空間比較大。

我們都知道建表的時候都要設定一下表的儲存引擎,一般常選擇有innodb和myisam儲存引擎,這兩者有什麼區別:

1,檔案儲存結構:

myisam索引檔案和資料檔案是分離的(非聚集),索引也是按照按b+tree組織的乙個索引結構檔案,但是表資料不是,葉子節點不包含資料記錄,只記錄了行資料所在的磁碟檔案位址。

innodb 表資料檔案本身就是按b+tree組織的乙個索引結構檔案,是一種聚集索引-葉節點包含了完整的資料記錄。

myisam:

檔案分別對應的是表結構、表資料、索引資料

檔案分別表示:表結構,表索引和表資料

2,事物

innodb支援事物,而myisam不支援,就沒有了事物的四個特徵acid。

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

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

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

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

MySQL索引資料結構

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