首頁  >  文章  >  資料庫  >  MySQL中InnoDB與MyISAM的比較分析

MySQL中InnoDB與MyISAM的比較分析

WBOY
WBOY轉載
2023-06-02 16:16:351386瀏覽

比較InnoDB與MyISAM

1、 儲存結構

MyISAM:每個MyISAM在磁碟上儲存成三個檔案。分別為:表定義檔、資料檔、索引檔。第一個檔案的名字以表格的名字開始,副檔名指出檔案類型。 .frm檔案儲存表定義。資料檔案的副檔名為.MYD (MYData)。索引檔的副檔名是.MYI (MYIndex)。

InnoDB:所有的表都保存在同一個資料檔案中(也可能是多個文件,或是獨立的表空間檔案),InnoDB表的大小只受限於作業系統檔案的大小,一般為2GB。

2、 儲存空間

MyISAM: MyISAM支援支援三種不同的儲存格式:靜態表(默認,但是注意資料結尾不能有空格,會被去掉)、動態表、壓縮表。當表在建立之後並匯入資料之後,不會再進行修改操作,可以使用壓縮表,極大的減少磁碟的空間佔用。

InnoDB: 需要更多的記憶體和存儲,它會在主記憶體中建立其專用的緩衝池用於高速緩衝資料和索引。

3、 可攜性、備份及恢復

MyISAM:資料是以檔案的形式存儲,所以在跨平台的資料轉移中會很方便。在備份和還原時可單獨針對某個表進行操作。

InnoDB:免費的方案可以是拷貝資料檔案、備份 binlog,或是用 mysqldump,在資料量達到幾十G的時候就相對痛苦了。

4、 事務支援

MyISAM:強調的是效能,每次查詢具有原子性,其執行數度比InnoDB類型更快,但不提供事務支持。

InnoDB:提供事務支援事務,外部鍵等高階資料庫功能。具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。

5、 AUTO_INCREMENT

MyISAM:可以和其他欄位一起建立聯合索引。引擎的自動增長列必須是索引,如果是組合索引,自動增長可以不是第一列,他可以根據前面幾列進行排序後遞增。

InnoDB:InnoDB中必須包含只有該欄位的索引。引擎的自動增長列必須是索引,如果是組合索引也必須是組合索引的第一列。

6、 表鎖差異

MyISAM: 只支援表級鎖定,使用者在操作myisam表時,select,update,delete,insert語句都會給表自動加鎖,如果加鎖以後的表滿足insert並發的情況下,可以在表的尾部插入新的資料。

InnoDB: 支援交易和行級鎖定,是innodb的最大特色。行鎖大幅提高了多用戶並發操作的新能。但是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的。

7、全文索引

MyISAM:支援FULLTEXT類型的全文索引

InnoDB:不支援FULLTEXT類型的全文索引,但是innodb可以使用sphinx外掛程式支援全文索引,並且效果更好。

8、表主鍵

MyISAM:允許沒有任何索引和主鍵的表存在,索引都是保存行的位址。

InnoDB:如果沒有設定主鍵或非空唯一索引,就會自動產生一個6位元組的主鍵(使用者不可見),資料是主索引的一部分,附加索引保存的是主索引的值。

9、表格的具體行數

MyISAM: 儲存有表格的總行數,如果select count() from table;會直接取出出該值。

InnoDB: 沒有保存表格的總行數,如果使用select count(*) from table;就會遍歷整個表,消耗相當大,但是在加了wehre條件後,myisam和innodb處理的方式都一樣。

10、CRUD操作

MyISAM:如果執行大量的SELECT,MyISAM是更好的選擇。

InnoDB:如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表。

11、 外鍵

MyISAM:不支援

InnoDB:支援

以上是MySQL中InnoDB與MyISAM的比較分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除