天天看點

Mysql存儲引擎之InnoDB存儲引擎, MyISAM存儲引擎, InnoDB和MyISAM的差別1. InnoDB存儲引擎2. MyISAM存儲引擎

MySQL中索引是在存儲引擎層實作的,

執行查詢引擎的指令show engines,就可以看到MySQL支援的存儲引擎結果.

mysql支援存儲引擎有好幾種,咱們這裡主要讨論一下常用的Innodb,MyISAM存儲引擎。

1. InnoDB存儲引擎

1.1 InnoDB特點

  • InnoDB存儲引擎提供了具有送出、復原和崩潰恢複能力的事務安全。相比較MyISAM存儲引擎,InnoDB寫的處理效率差一點并且會占用更多的磁盤空間保留資料和索引。
  • 提供了對資料庫事務ACID(原子性Atomicity、一緻性Consistency、隔離性Isolation、持久性Durability)的支援,實作了SQL标準的四種隔離級别。
  • 設計目标就是處理大容量的資料庫系統,MySQL運作時InnoDB會在記憶體中建立緩沖池,用于緩沖資料和索引。
  • 執行“select count(*) from table”語句時需要掃描全表,因為使用innodb引擎的表不會儲存表的具體行數,是以需要掃描整個表才能計算多少行。
  • InnoDB引擎是行鎖,粒度更小,是以寫操作不會鎖定全表,在并發較高時,使用InnoDB會提升效率。即存在大量UPDATE/INSERT操作時,效率較高。
  • InnoDB清空資料量大的表時,是非常緩慢,這是因為InnoDB必須處理表中的每一行,根據InnoDB的事務設計原則,首先需要把“删除動作”寫入“事務日志”,然後寫入實際的表。是以,清空大表的時候,最好直接drop table然後重建。即InnoDB一行一行删除,不會重建表。

1.2 使用場景:

  • 經常UPDETE/INSERT的表,使用處理多并發的寫請求
  • 支援事務,必選InnoDB。
  • 可以從災難中恢複(日志+事務復原)
  • 外鍵限制、列屬性AUTO_INCREMENT支援

2. MyISAM存儲引擎

2.1 特點:

  • MyISAM不支援事務,不支援外鍵,SELECT/INSERT為主的應用可以使用該引擎。
  • 每個MyISAM在存儲成3個檔案,擴充名分别是:
    1. frm:存儲表定義(表結構等資訊)
    2. MYD(MYData),存儲資料
    3. MYI(MYIndex),存儲索引
  • 不同MyISAM表的索引檔案和資料檔案可以放置到不同的路徑下。
  • MyISAM類型的表提供修複的工具,可以用CHECK TABLE語句來檢查MyISAM表健康,并用REPAIR TABLE語句修複一個損壞的MyISAM表。
  • 在MySQL5.6以前,隻有MyISAM支援Full-text全文索引

2.2 使用場景:

  • 經常SELECT/INSERT的表,插入不頻繁,查詢非常頻繁
  • 不支援事務
  • 做很多count 的計算。

3. MyISAM和Innodb差別

InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個存儲引擎,這兩個存儲引擎各有優劣,視具體應用而定。基本的差别為:MyISAM類型不支援事務處理,而InnoDB類型支援。MyISAM類型強調的是性能,其執行速度比InnoDB類型更快,而InnoDB提供事務支援以及外鍵等進階資料庫功能。

  • 具體實作的差别:
  1. MyISAM是非事務安全型的,而InnoDB是事務安全型的。
  2. MyISAM鎖的粒度是表級,而InnoDB支援行級鎖定。
  3. MyISAM不支援外鍵,而InnoDB支援外鍵
  4. MyISAM相對簡單,是以在效率上要優于InnoDB,小型應用可以考慮使用MyISAM。
  5. InnoDB表比MyISAM表更安全。

繼續閱讀