MyISAM和InnoDB區別關聯詳解

Mysql架構
什麼存儲引擎
MySQL和InnoDB對比1.2
總結

Mysql存儲架構

在這裏插入圖片描述
從上圖可以發現,MySQL由以下幾部分組成:
連接池組件
管理服務和工具組件
SQL接口組件
查詢分析器組件
優化器組件
緩衝(Cache) 組件
插件式存儲引擎
物理文件

爲什麼會有存儲引擎

    進程實現數據處理時,是不可能直接訪問磁盤上的數據的,因爲它沒有權限,只有讓內核來把它所訪問的數據加載至內存中以後,進程在內存中完成修改,由內核再負責把數據存回磁盤 ,整個存取過程,尤其是訪問比較熱點的數據,也不可能每一次當用戶訪問時或當某SQL語句用到時再臨時從磁盤加載到內存中.這樣效率較低

存儲引擎簡單功用

    存儲引擎負責把具體分析的結果完成對磁盤上文件路徑訪問的轉換,數據庫中的行數據都是存儲在磁盤塊上的,因此存儲引擎要把數據庫數據映射爲磁盤塊,並把磁盤塊加載至內存中,把頻繁訪問到的熱點數據,統統裝入內存,用戶訪問、修改時直接在內存中操作,只不過週期性的寫入磁盤上而已
需要特備註意的是,存儲引擎是基於表的而不是數據庫

MySQL和InnoDB對比1

    mysql是插件式存儲引擎,它就能夠替換使用選擇多種不同的引擎,MyISAM是MySQL 經典的存儲引擎
之一,InnoDB是innobase提供給MySQL的
在這裏插入圖片描述
注:

2.僅當使用壓縮行格式時,才支持壓縮MyISAM表。 在MyISAM中使用壓縮行格式的表是隻讀的。

3.通過加密功能在服務器中實現。

4.通過加密功能在服務器上實現; 在MySQL 5.7和更高版本中,支持靜態數據表空間加密。

6. MySQL 5.6和更高版本提供了對FULLTEXT索引的InnoDB支持。

7. MySQL 5.7和更高版本提供了InnoDB對地理空間索引的支持。

8. InnoDB在內部將哈希索引用於其自適應哈希索引功能。
InnoDB和MyISAM之間的比較2

1、InnoDB通過重放其日誌從崩潰或其他意外關閉中恢復。 MyISAM必須完全掃描並修復或重建任何已更新但未完全刷新到磁盤的索引或可能的表。 由於InnoDB方法大約是固定時間,而MyISAM時間隨着數據文件的大小而增長,因此隨着數據庫大小的增長,InnoDB提供了更高的可用性。

2、將innodb_flush_log_at_trx_commit設置爲1的InnoDB在每次事務後刷新事務日誌,大大提高了可靠性。MyISAM必須在完全記錄的文件系統上運行,例如使用data = journal安裝的ext4,以提供與數據文件損壞相同的彈性。(可以將日誌放在SSD設備上以提高MyISAM性能,類似地,InnoDB日誌可以放在非日誌文件系統上,例如在SSD上運行的ext2,以獲得類似的性能提升。在任何一種情況下都不會犧牲可靠性。)

3、InnoDB可以在可靠性較低但在某些情況下具有更高性能的模式下運行。 將innodb_flush_log_at_trx_commit設置爲0將切換到在將控制權返回給調用方之前未將事務提交到磁盤的模式。 相反,磁盤刷新發生在計時器上。

I4、InnoDB會自動將多個併發I插入組合在一起並同時將它們刷新到磁盤。MyISAM依賴於文件系統塊緩存來緩存對數據行和索引的讀取,而InnoDB在引擎本身內執行此操作,將行緩存與索引緩存相結合。

5、如果存在,InnoDB將以主鍵順序存儲行,否則將存儲第一個唯一鍵順序。 如果選擇密鑰以便於常見操作,這可以明顯更快。如果沒有主鍵或唯一密鑰,InnoDB將使用內部生成的唯一整數密鑰,並將以粗略的插入順序物理存儲記錄,如 MyISAM做到了。 或者,可以使用自動增量主鍵字段來實現相同的效果。

6、InnoDB爲數據和索引提供可更新的LZW壓縮頁面存儲。 MyISAM壓縮表無法更新。

7、在完全符合ACID標準的模式下運行時,InnoDB必須每次事務至少對磁盤執行一次刷新,儘管它會將刷新與多個連接的插入結合起來。 對於典型的硬盤驅動器或陣列,這將限制每秒約200次更新事務。 對於需要更高事務率的應用程序,將需要具有寫入緩存和備用電池的磁盤控制器,以保持事務完整性。 InnoDB還提供了幾種減少這種影響的模式,自然會導致事務完整性保證的丟失,儘管仍然保留了比MyISAM更高的可靠性。 MyISAM沒有這種開銷,只是因爲它不支持事務。

8、MyISAM使用表級鎖定對任何現有行進行更新和刪除,並可選擇附加新行而不是鎖定並將其插入可用空間。 InnoDB使用行級鎖定。 對於經常更新許多行的大型數據庫應用程序,行級鎖定至關重要,因爲單個表級鎖定會顯着降低數據庫中的併發性。
InnoDB和MyISAM都支持全文搜索,InnoDB在MySQL 5.6.4中獲得全文索引支持[5],但結果可能會有顯着差異.

總結

MyISAM存儲引擎適用場景
    只讀(或者寫較少)、表較小(可以接受長時間進行修復操作)
MyISAM引擎文件
    tbl_name.frm 表格式定義
    tbl_name.MYD 數據文件
    tbl_name.MYI 索引文件

InnoDB數據庫文件
    所有InnoDB表的數據和索引放置於同一個表空間中
    表空間文件:datadir定義的目錄下
數據文件:ibddata1, ibddata2, …
    每個表單獨使用一個表空間存儲表的數據和索引
    兩類文件放在對應每個數據庫獨立目錄中
數據文件(存儲數據和索引):tb_name.ibd
    表格式定義:tb_name.frm
啓用:innodb_file_per_table=ON (MariaDB 5.5以後版是默認值)

發佈了56 篇原創文章 · 獲贊 11 · 訪問量 3046
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章