MySQL—淺談MySQL存儲引擎

和大多數數據庫不同,MySQL中有一個存儲引擎的概念,對於不同的存儲需求可以選擇最優的存儲引擎。如下是MySQL種常見的幾種引擎以及其特性。

這裏寫圖片描述

其中MyISAM和InnoDB是我們最最常用的兩個存儲引擎,下面主要將對比這兩種引擎的特點,以及分析在不同的需求下如何選擇合適的引擎。

MyISAM

MyISAM是MySQL默認的數據庫引擎,它不支持事務、不支持外鍵,優點是訪問速度比較快,因爲使用表級鎖所以不存在死鎖(後面會講),但是一個重要缺陷就是不能在表損壞後恢復數據。所以對於事務完整性要求或者以SELECT、INSERT爲主要需求的應用,MyISAM是最好的選擇。

每一個MyISAM在磁盤上存儲爲3個文件:

  • table_name.frm(表定義)
  • table_name.MYD(表數據)
  • table_name.MYI(表索引)

由於數據和索引可以存放在不同的目錄,所以可以獲得更快的速度(平均分佈IO)。

InnoDB

InnoDB提供了具有提交、回滾和崩潰恢復能力的事務安全使用了行級鎖,因此鎖衝突較MyISAM小很多。但是InnoDB寫的處理效率較差,並且佔用更多的磁盤空間保留數據和索引。

  • 外鍵約束:MySQL支持外鍵約束的存儲引擎只有InnoDB,在創建外鍵的時候,要求父表必須有對應的索引,子表在創建外鍵的時候也會自動創建對用的索引。
  • 存儲方式:
    使用共享表空間:表結構在.frm中,數據在innodb_data_home_dir中,索引在innodb_data_file_path定義的表空間中。
    使用多表空間存儲:表的表結構仍然在.frm中,但是每一個表的數據和索引分開放在.ibd中。

選擇合適的存儲引擎

  • MyISAM:默認的插件式引擎。如果應用是以讀、寫操作爲主,更新和刪除操作爲輔,對事物的完整性和併發性要求不高,那麼是非常合適的,如WEB、數據倉庫等應用環境下。

  • InnoDB:用於事務處理應用程序,支持外鍵。如果應用對事務完整性有比較高的要求,併發條件下需要數據的一致性,除了數據的讀、寫以外還有大量的刪除更新操作,那麼InnoDB是更加合適的引擎。InnoDB有效降低刪除和更新帶來的鎖定,還可以確保事務的完整提交和回滾。對於類似財務系統和計費系統,InnoDB是不二之選。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章