MySQL儲存引擎MyISAM與InnoDB的區別比較
阿新 • • 發佈:2018-12-06
使用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中獲得全文索引,會慢一點 |