InnoDB與MyISAM的區別(詳細)

1、InnoDB的特色

  1. 支持行鎖,採用MVCC來支持高併發,有可能死鎖
  2. 支持事務
  3. 支持外鍵
  4. 支持崩潰後的安全恢復
  5. 不支持全文索引
  6. B+Tree葉節點的data域存放的是數據記錄的地址。在索引檢索的時候,首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,則取出其 data 域的值,而後以 data 域的值爲地址讀取相應的數據記錄。這被稱爲「非聚簇索引」。

2、MyISAM的特色

  1. 不支持行鎖(MyISAM只有表鎖)
  2. 不支持事務
  3. 不支持外鍵
  4. 不支持崩潰後的安全恢復
  5. 支持BLOB和TEXT的前500個字符索引,支持全文索引
  6. 對於不會進行修改的表,支持壓縮表,極大地減小了磁盤空間的佔用
  7. 其數據文件自己就是索引文件。相比MyISAM,索引文件和數據文件是分離的,其表數據文件自己就是按B+Tree組織的一個索引結構,樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,所以InnoDB表數據文件自己就是主索引。這被稱爲「聚簇索引(或彙集索引)」。而其他的索引都做爲輔助索引,輔助索引的data域存儲相應記錄主鍵的值而不是地址,這也是和MyISAM不一樣的地方。在根據主索引搜索時,直接找到key所在的節點便可取出數據;在根據輔助索引查找時,則須要先取出主鍵的值,再走一遍主索引。 所以,在設計表的時候,不建議使用過長的字段做爲主鍵,也不建議使用非單調的字段做爲主鍵,這樣會形成主索引頻繁分裂。

3、關於兩者的對比和總結

MyISAM 強調的是性能,每次查詢具備原子性,其執行速度比InnoDB類型更快,可是不提供事務支持。可是InnoDB 提供事務支持事務,外部鍵等高級數據庫功能。 具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。 MyISAM更適合讀密集的表,而InnoDB更適合寫密集的的表
相關文章
相關標籤/搜索