MySQL資料庫引擎對比 不斷完善中

2022-01-30 03:19:20 字數 2076 閱讀 8669

雖然標題是mysql的資料庫引擎對比

但是只對比最具代表性的

myisam和innodb

1、最明顯的區別

innodb支援事務處理,而myisam不支援

innodb支援行級鎖,而myisam只支援表鎖

innodb支援外來鍵,而myisam不支援

既然如此,那myisam還有啥存在的必要?

myisam的優勢在於能夠提供比innodb更快速的「查詢」功能。

畢竟,很多表都是寫少讀多。

很多資料說,myisam是mysql的預設引擎

我覺得這麼說不合適

一是預設引擎是可以設定的

二是因為我的mysql預設引擎是innodb,好像我也沒改過這個配置

2、檔案結構

myisam的表有三個檔案 .frm .myd .myi

分別是表定義檔案、資料檔案和索引檔案。

innodb是兩個檔案,乙個資料檔案和乙個日誌檔案。

如果只從這點考慮,myisam的insert和update效能不如innodb。

事實上也確實如此

我沒有做過實驗對比。需要update的表,

一般都需要事務支援,那只能用innodb。

3、增刪查改

對於增,即insert,innodb速度快一些。

對於刪,即delete,兩者相差不大。

有個例外,對於delete from user_info; 這種整表刪除,

myisam是表檔案後再重新建立,而innodb是一行一行刪除記錄。

o(1) 與 o(n)的區別。

對於查,即select,myisam要快很多,這是myisam的殺手鐗。

傳統的web應用,都是寫少讀多,那麼正式myisam的用武之地。

再舉乙個o(1) 對 o(n)的例子:

由於myisam中儲存表的行數

因此 select count(*) from user_info; 這種命令執行很快

而innodb查詢統計表中記錄條數。

對於改,即update,innodb速度更快,支援事務和行級鎖。

因此,myisam完敗

4、鎖

my

isam只支援表鎖,不支援行鎖

因此,在併發更新時,效率比innodb低很多

當然,並不是每次更新的效率都低很多

在innodb中,對於 update user_info set age = 26 where user_name like '%tom%';

這種無法確定更新範圍的語句,依然要鎖整個表

5、auto_increment

在innodb中,如果乙個欄位被設定為auto_increment

那麼這個表必須有乙個索引,這個索引只包含這乙個字段

這雖然是乙個限制條件,但是一般很少遇到

因為大部分情況下,設為auto_increment的字段都是唯一主鍵

另外,myisam的auto_increment的效率要比innodb高 (10%左右)

遇到過很多次,insert時資料庫報錯說重複主鍵

之間一家公司,自己寫了個服務替代mysql的auto_increment

也有用uuid最為主鍵的,這樣最簡單,不過檢索效率低些。

因此,myisam能高10%,也是乙個不錯的優勢

6、總結

對於需要事務處理的表,乖乖使用innodb吧。

對於需要併發更新的表,還是乖乖使用innodb吧。

對於另外的情況,

如果是寫多讀少的表,那麼還是使用innodb吧。

如果是寫少讀多的表,盡量使用myisam,這正是myisam被設計出來的目的。

mysql資料庫引擎 mysql資料庫引擎

資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...

mysql資料庫的常用引擎和對比

innodb引擎,mysql的預設引擎 特點 1 innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事物安全 acid相容 儲存引擎。innodb鎖定在行級並且也在select語句中提供乙個類似oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在sql查詢中,可以自由地將innod...

幾種MySQL資料庫引擎優缺點對比

資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統 dbms 使用資料引擎進行建立 查詢 更新和刪除資料。不同的儲存引擎提供不同的儲存機制 索引技巧 鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。mysql的核心就是儲存引擎。sho...