innodb和myisam的區別及索引實現原理

2021-09-26 06:10:19 字數 1072 閱讀 4291

innodb和myisam是mysql中常用的兩種引擎,以下是兩者的比較:

innodb

myisam

對事務的支援

支援四種事務的隔離級別

不支援支援的鎖種類

行鎖、頁鎖、表鎖

表鎖是否支援全文索引

不支援支援

索引聚集索引

非聚集索引

併發根據事務隔離級別

讀寫互相阻塞

儲存基於磁碟的資源是innodb表空間資料檔案和它的日誌檔案

在磁碟中儲存成三個檔案,分別是:索引檔案、資料檔案、表定義

使用場景

事務要求高,對資料大量的修改操作…

事務要求不高,查詢操作多、併發低…

下面看一下兩者的索引實現的原理:

myisam:非聚集索引

採用b+樹的資料索引結構

索引作為單獨的檔案儲存起來,記錄了資料的存放位址

上圖以表的col1欄位作為主鍵,可以看出索引檔案裡儲存的是資料主鍵的位址

innodb:聚集索引

採用b+樹的資料索引結構:

與myisam不同的是,索引的本身就是資料的一部分,因此,每乙個葉子節點都儲存了完整的資料

主索引的查詢:select * from user where id=?

輔助索引的查詢:select * from user where name=?

實際上它首先是根據輔助索引查詢到子節點中與輔助索引繫結的主索引,再根據主索引查詢相當於執行了select * from user where id=(select id from user where name=?);

所以在innodb表中,當我們按主鍵查詢時效率很高,但使用輔助索引的話效率就會很低;

MySQL中MyISAM與InnoDB區別

mysql中myisam與innodb區別 myisam innodb 事物處理 不支援支援 外來鍵不支援 支援行鎖 不支援支援 全文索引 支援不支援 表的具體行數 儲存表的具體行數 掃瞄表來計算行數 delete表時 先drop表,然後重建表 一行一行的刪除 索引和資料 分開的,並且索引是有壓縮的...

MySQL中MyISAM與InnoDB區別及選擇

innodb 支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 不支援fulltext型別的索引 不儲存表的具體行數,掃瞄表來計算有多少行 delete 表時,是一行一行的刪除 innodb 把資料和索引存放在表空間裡面 跨平台可直接拷貝使用 innodb中必須包含auto increment型別欄...

MySQL中MyISAM與InnoDB區別及選擇

支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 不支援fulltext型別的索引 不儲存表的具體行數,掃瞄表來計算有多少行 delete 表時,是一行一行的刪除 innodb 把資料和索引存放在表空間裡面 跨平台可直接拷貝使用 innodb中必須包含auto increment型別欄位的索引 很難...