mysql存儲引擎MyISAM與InnoDB的優劣

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

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

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


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

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

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

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


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