1. 程式人生 > >MySQL儲存引擎MyISAM與InnoDB的區別比較

MySQL儲存引擎MyISAM與InnoDB的區別比較

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

MySQL的預設引擎5.7以前是MyISAM,5.7以後是InnoDB。建議使用InnoDB。

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

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