萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL存儲引擎MyISAM與InnoDB的優劣分析

MySQL存儲引擎MyISAM與InnoDB的優劣分析

在mysql中常用的數據存儲方法有MyISAM與InnoDB,其它的像什麼內存之類我們想都不用想,下面我來介紹MyISAM與InnoDB各種優點與不足吧。

使用MySQL當然會接觸到MySQL的存儲引擎,在新建數據庫和新建數據表的時候都會看到。

MySQL默認的存儲引擎是MyISAM,其他常用的就是InnoDB了。

至於到底用哪種存儲引擎比較好?這個問題是沒有定論的,需要根據你的需求和環境來衡量。所以對這兩種引擎的概念、原理、異同和各自的優劣點有了詳細的了解之後,再根據自己的情況選擇起來就容易多了。

  MyISAM InnoDB 存儲結構 每張表被存放在三個文件:
  1. frm-表格定義
  2. MYD(MYData)-數據文件
  3. MYI(MYIndex)-索引文件
所有的表都保存在同一個數據文件中(也可能是多個文件,或者是獨立的表空間文件),InnoDB表的大小只受限於操作系統文件的大小,一般為2GB 存儲空間 MyISAM可被壓縮,存儲空間較小 InnoDB的表需要更多的內存和存儲,它會在主內存中建立其專用的緩沖池用於高速緩沖數據和索引 可移植性、備份及恢復 由於MyISAM的數據是以文件的形式存儲,所以在跨平台的數據轉移中會很方便。在備份和恢復時可單獨針對某個表進行操作 免費的方案可以是拷貝數據文件、備份 binlog,或者用 mysqldump,在數據量達到幾十G的時候就相對痛苦了 事務安全 不支持每次查詢具有原子性 支持具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表 AUTO_INCREMENT MyISAM表可以和其他字段一起建立聯合索引 InnoDB中必須包含只有該字段的索引 SELECT MyISAM更優   INSERT   InnoDB更優 UPDATE   InnoDB更優 DELETE   InnoDB更優它不會重新建立表,而是一行一行的刪除 COUNT without WHERE MyISAM更優。因為MyISAM保存了表的具體行數 InnoDB沒有保存表的具體行數,需要逐行掃描統計,就很慢了 COUNT with WHERE 一樣 一樣,InnoDB也會鎖表 鎖 只支持表鎖 支持表鎖、行鎖行鎖大幅度提高了多用戶並發操作的新能。但是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的 外鍵 不支持 支持 FULLTEXT全文索引 支持 不支持可以通過使用Sphinx從InnoDB中獲得全文索引,會慢一點

總的來說,MyISAM和InnoDB各有優劣,各有各的使用環境。

但是InnoDB的設計目標是處理大容量數據庫系統,它的CPU利用率是其它基於磁盤的關系數據庫引擎所不能比的。

我覺得使用InnoDB可以應對更為復雜的情況,特別是對並發的處理要比MyISAM高效。同時結合memcache也可以緩存SELECT來減少SELECT查詢,從而提高整體性能。

copyright © 萬盛學電腦網 all rights reserved