MySQL的InnoDB引擎與MyISAM引擎

2022-02-26 05:42:42 字數 2092 閱讀 6845

myisam:這個是預設型別,它是基於傳統的isam型別,isam是indexed sequential access method (有索引的順序訪問方法) 的縮寫,它是儲存記錄和檔案的標準方法。與其他儲存引擎比較,myisam具有檢查和修復**的大多數工具。 myisam

**可以被壓縮,而且它們支援全文搜尋。它們不是事務安全的,而且也不支援外來鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量的select,myisam是更好的選擇。

innodb:這種型別是事務安全的,它們還支援外來鍵。innodb**速度很快, 因此如果需要乙個事務安全的儲存引擎,建議使用它。如果你的資料執行大量的insert或update,出於效能方面的考慮,應該使用innodb表。對於支援事務的innodb型別的表,影響速度的主要原因是autocommit預設設定是開啟的,而且程式沒有顯式呼叫begin 開始事務,導致每插入一條都自動commit,嚴重影響了速度。可以在執行sql前呼叫begin,多條sql形成乙個事物(即使autocommit開啟也可以),將大大提高效能。  

myisam

innodb

構成上區別

每個myisam在磁碟上儲存成三個檔案。檔名為表名,擴充套件名為檔案型別。

.frm 檔案儲存表定義;

.myd(mydata) 資料檔案的副檔名;

.myi(myindex) 索引檔案的副檔名。

基於磁碟的資源是innodb表空間資料檔案和它的日誌檔案,innodb 表的大小只受限於作業系統檔案的大小,一般為 2gb

事務處理方面

myisam型別的表強調的是效能,其執行速度比innodb型別更快,但是不提供事務支援。

innodb提供事務支援事務,外部鍵等高階資料庫功能。

表級鎖行級鎖

innodb表的行鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表,例如update table set num=1 where name like 「%aaa%」

select、insert、update、delete操作

如果執行大量的 select,myisam 是更好的選擇。

1.如果你的資料執行大量的insert或update,出於效能方面的考慮,應該使用innodb表。

2.delete from table時,innodb不會重新建立表,而是一行一行的刪除。

3.load table from master操作對innodb是不起作用的,解決方法是首先把innodb表改成myisam表,匯入資料後再改成innodb表,但是對於使用的額外的innodb特性(例如外來鍵)的表不適用。

對於auto_increment型別的字段

必須包含只有該字段的索引

可以和其他字段一起建立聯合索引

innodb不支援fulltext型別的索引。

myisam型別的二進位制資料檔案可以在不同作業系統中遷移

以下是一些細節和具體實現的差別:

innodb不支援fulltext型別的索引。

innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行,但是myisam只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。

對於auto_increment型別的字段,innodb中必須包含只有該字段的索引,但是在myisam表中,可以和其他字段一起建立聯合索引。

delete from table時,innodb不會重新建立表,而是一行一行的刪除。

load table from master操作對innodb是不起作用的,解決方法是首先把innodb表改成myisam表,匯入資料後再改成innodb表,但是對於使用的額外的innodb特性(例如外來鍵)的表不適用。

綜上所述,任何一種表都不是萬能的,只有恰當的針對業務型別來選擇合適的表型別,才能最大的發揮mysql的效能優勢。

MySql鎖與InnoDB引擎

表鎖和行鎖的區別 mysql的表級鎖有兩種 元資料鎖和表鎖。表鎖的兩種形式 元資料鎖 mysql的行級鎖是有儲存引擎實現的,mysql現在預設的資料引擎為innodb。本文主要介紹innodb的行鎖 innodb的行鎖是給索引項加鎖實現的,也就意味著只有使用索引檢索的資料才能使用行鎖,否則將使用表鎖...

Mysql儲存引擎InnoDB與Myisam的區別

1,事務處理 innodb 支援事務功能,myisam 不支援。myisam 的執行速度更快,效能更好。2,select update insert delete 操作 myisam 如果執行大量的select,myisam是更好的選擇 innodb 如果你的資料執行大量的insert或update...

MySQL的儲存引擎INNODB

1 一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的檢視 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 你要看某個錶用了什麼引擎 在顯示...