MySQL儲存引擎MyISAM與InnoDB的優劣
使用MySQL當然會接觸到MySQL的儲存引擎,在新建資料庫和新建資料表的時候都會看到。
MySQL預設的儲存引擎是MyISAM,其他常用的就是InnoDB了。
至於到底用哪種儲存引擎比較好?這個問題是沒有定論的,需要根據你的需求和環境來衡量。所以對這兩種引擎的概念、原理、異同和各自的優劣點有了詳細的瞭解之後,再根據自己的情況選擇起來就容易多了。
MyISAM | InnoDB | |
---|---|---|
儲存結構 | 每張表被存放在三個檔案:
|
所有的表都儲存在同一個資料檔案中(也可能是多個檔案,或者是獨立的表空間檔案),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查詢,從而提高整體效能。
本文轉自 小楊_Ivan 51CTO部落格,原文連結:http://blog.51cto.com/aqiang/1896091
相關文章
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MyISAM與innoDB儲存引擎有何差別儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL常見的兩種儲存引擎:MyISAM與InnoDB的愛恨情仇MySql儲存引擎
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- 服務端指南 資料儲存篇 | MySQL(02) 儲存引擎的 InnoDB 與 MyISAM 之爭服務端MySql儲存引擎
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- mysql常用儲存引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介紹與如何選擇MySql儲存引擎Hive
- MySQL InnoDB儲存引擎MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- 說說自己對於 MySQL 常見的兩種儲存引擎:MyISAM與 InnoDB的理解MySql儲存引擎
- MySQL之儲存引擎InnoDB和MyISAM的區別及底層詳解MySql儲存引擎
- (MariaDB/MySQL)MyISAM儲存引擎讀、寫操作的優先順序MySql儲存引擎
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- mysql dba系統學習(20)mysql儲存引擎MyISAMMySql儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 一文徹底弄懂MySQL的各個儲存引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDBMySql儲存引擎Hive
- 談談MySQL InnoDB儲存引擎事務的ACID特性MySql儲存引擎
- InnoDB儲存引擎簡介儲存引擎
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- 每日分享-MySQL-2019-08-05-【InnoDB 儲存引擎】MySql儲存引擎
- MySQL中InnoDB儲存引擎的實現和執行原理MySql儲存引擎
- 小談mysql儲存引擎優化MySql儲存引擎優化
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- innodb儲存引擎鎖的實現(一)儲存引擎
- 《MySQL 基礎篇》十二:InnoDB 儲存引擎的資料結構MySql儲存引擎資料結構
- MySQL資料庫InnoDB儲存引擎中的鎖機制GVMySql資料庫儲存引擎
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- MySQL MyISAM引擎的讀鎖與寫鎖MySql
- MySQL 儲存引擎MySql儲存引擎
- MySQL儲存引擎MySql儲存引擎
- MySQL原理 - InnoDB引擎 - 行記錄儲存 - Off-page 列MySql
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC