Mysiam和innodb的區別

2021-08-06 07:24:58 字數 1924 閱讀 4889

1、事務處理

innodb 支援事務功能,myisam 不支援。

myisam 的執行速度更快,效能更好。

2、select ,update ,insert ,delete 操作

myisam:

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

innodb:

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

3、鎖機制不同

innodb 為行級鎖,myisam 為表級鎖。

注意:當資料庫無法確定,所找的行時,也會變為鎖定整個表。

如:update table set num = 10 where username like "%test%";

4、查詢表的行數不同

myisam:

select count(*) from table,myisam只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含where條件時,兩種表的操作是一樣的

innodb

:innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行

5、物理結構不同

myisam

:每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。

.frm檔案儲存表定義。

資料檔案的擴充套件名為.myd (mydata)。

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

innodb:

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

6、anto_increment 機制不同

更好和更快的auto_increment處理

其他:為什麼myisam

會比innodb 的查詢速度快

innodb在做select的時候,要維護的東西比myisam引擎多很多;

1)資料塊,innodb要快取,myisam只快取索引塊, 

這中間還有換進換出的減少; 

2)innodb定址要對映到塊,再到行,myisam 記錄的直接是檔案的offset,定位比innodb要快

3)innodb還需要維護mvcc一致;雖然你的場景沒有,但他還是需要去檢查和維護

mvcc ( multi-version concurrency control )多版本併發控制 

innodb:通過為每一行記錄新增兩個額外的隱藏的值來實現mvcc,這兩個值乙個記錄這行資料何時被建立,另外乙個記錄這行資料何時過期(或者被刪除)。但是innodb並不儲存這些事件發生時的實際時間,相反它只儲存這些事件發生時的系統版本號。這是乙個隨著事務的建立而不斷增長的數字。每個事務在事務開始時會記錄它自己的系統版本號。每個查詢必須去檢查每行資料的版本號與事務的版本號是否相同。讓我們來看看當隔離級別是repeatable read時這種策略是如何應用到特定的操作的:

select innodb必須每行資料來保證它符合兩個條件:

1、innodb必須找到乙個行的版本,它至少要和事務的版本一樣老(也即它的版本號不大於事務的版本號)。這保證了不管是事務開始之前,或者事務建立時,或者修改了這行資料的時候,這行資料是存在的。

2、這行資料的刪除版本必須是未定義的或者比事務版本要大。這可以保證在事務開始之前這行資料沒有被刪除。

MySIAM 與innodb的差異

比較項 myisam innodb 備註儲存檔案 資料和索引分別儲存,資料.myd 索引.myi 支援檔案級別的拷貝移動。資料和索引集中儲存。ibd。不支援檔案級別的移動,還有其他的相關檔案。檔案移動 支援不支援 記錄儲存順序 插入順序,在表末尾插入記錄。主鍵順序,插入是需要排序操作。空間碎片 產生...

Mysql MyIsam和InnoDB的區別

myisam 這個是預設型別,它是基於傳統的isam型別,isam是indexed sequential access method 有索引的 順序訪問方法 的縮寫,它是儲存記錄和檔案的標準方法.與其他儲存引擎比較,myisam具有檢查和修復 的大多數工具.myisam 可以被壓縮,而且它們支援全文...

MySQL中MyISAM與InnoDB區別

mysql中myisam與innodb區別 myisam innodb 事物處理 不支援支援 外來鍵不支援 支援行鎖 不支援支援 全文索引 支援不支援 表的具體行數 儲存表的具體行數 掃瞄表來計算行數 delete表時 先drop表,然後重建表 一行一行的刪除 索引和資料 分開的,並且索引是有壓縮的...