(二)Mylsam和Innodb底層的區別

2021-09-28 10:46:23 字數 873 閱讀 9568

兩者底層都採用的資料結構是b+樹,但是實現方式又略有不同。myisam的b+樹採用的是非聚集索引(輔助索引),innodb的b+樹採用的聚集索引。

對於 innodb 來說,表資料檔案本身就是按 b+tree 組織的乙個索引結構,這棵樹的葉節點 data 域儲存了完整的資料記錄。

由於 innodb 利用的資料庫主鍵作為索引 key,所以 innodb 資料表檔案本身就是主索引,且因為 innodb 資料檔案需要按照主鍵聚集,所以使用 innodb 作為資料引擎的表需要有個主鍵,如果沒有顯式指定的話 mysql 會嘗試自動選擇乙個可以唯一標識資料的列作為主鍵,如果無法找到,則會生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形

舉個例子:在乙個innodb表中,存在id主鍵1-1000個。 在計算機裡面儲存時會把1000個id進行劃分,比如第一層中將一部分id(記id_s1)儲存在第乙個結點當中,第二層中將另外一部分id(記id_s2)和上訴id_s1進行儲存,第三層中在把1000個id全部儲存,然後由聚集索引拿到對於id儲存的資料。

由於採用非聚集索引,索引檔案的資料域儲存指向資料檔案的指標。所以myisam表中有三個檔案:索引檔案、表結構檔案、資料檔案;innodb表中只有兩個檔案,表結構檔案,索引+資料結合檔案。

innodb檔案: .frm檔案和.ibd檔案,前者儲存表結構,後者儲存表的索引+資料

InnoDB儲存結構二

在innodb中使用了大量的aio async io 來做讀寫處理,這樣可以極大提高資料庫的效能。在 innodb1.0版本之前共有4個io thread,分別是write,read,insert buffer和log thread,後來 版本將read thread和write thread分別增...

底半部機制之work struct(二)

工作佇列 工作佇列的實現和 tasklet 很相似,只是工作佇列的執行上下文在核心執行緒,所以可以排程和睡眠。首先是定義乙個工作佇列和乙個底半部執行函式 structwork struct my wq void my wq func structwork struct work 通過init wor...

InnoDB文件筆記(二) Redo Log

接著上篇,現在開始看看各個模組,文件上的內容有點弱,詳細的可以看看,mysql技術內幕 innodb儲存引擎 這本書的第七章!redo log是基於磁碟的資料結構,用來恢復由於未完成事務造成的資料修改。預設情況下,redo log在ib logfile0和ib logfile1這個兩個檔案中,m預設...