Mysql兩種主要資料引擎的區別

2021-10-24 15:21:50 字數 3179 閱讀 8290

innodb和myisam是在使用mysql最常用的兩個表型別,它們各有各的優點,視具體應用而定。

innodb引擎(該引擎在5.5後的mysql資料庫中為預設儲存引擎。)

innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標就是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整的資料庫系統,mysql執行時,innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援fulltext型別的索引,而且它啟動也比較慢,不會儲存表的行數,當執行select count(*) from table指令時,需要掃瞄全表。當需要使用資料庫事務時,該引擎就是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高的場景下,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。大容量的資料集時趨向於選擇innodb。因為它支援事務處理和故障的恢復。innodb可以利用資料日誌來進行資料的恢復。主鍵的查詢在innodb也是比較快的。innodb引擎的索引的資料結構是b+樹,只不過資料結構中儲存的都是實際的資料,這種索引有被稱為聚集索引。

myiasm引擎(該引擎在5.5前的mysql資料庫中為預設儲存引擎。)

myisam沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵。因此當執行insert插入或update更新語句時,即執行寫操作需要鎖定整個表,所以會導致效率降低。不過和innodb不同的是,myisam引擎中儲存了表的行數,於是當執行select count(*) from table時,可以直接讀取已經儲存好的值而不需要進行全表掃瞄。所以,如果表的讀操作遠遠多於寫操作,而且不需要資料庫事務的支援,可以將myiasm作為資料庫引擎的首選。大批量的插入語句時(這裡是insert語句)在myiasm引擎中執行的比較快,但是update語句在innodb下執行的會比較快,尤其是在併發量大的時候。myiasm引擎,b+樹的資料結構中儲存的內容實際上是實際資料的位址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引。

區別介紹

1、myisam是非事務安全的,而innodb是事務安全的

2、myisam鎖的粒度是表級的,而innodb支援行級鎖

3、myisam支援全文型別索引,而innodb不支援全文索引

4、myisam相對簡單,效率上要優於innodb,小型應用可以考慮使用myisam

5、myisam表儲存成檔案形式,跨平台使用更加方便

使用場景:

1、myisam管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果在應用中執行大量select操作,應該選擇myisam

2、innodb用於事務處理,具有acid事務支援等特性,如果在應用中執行大量insert和update操作,應該選擇innodb

3、大尺寸的資料集趨向於選擇innodb引擎,因為它支援事務處理和故障恢復。資料庫的大小決定了故障恢復的時間長短,innodb可以利用事務日誌進行資料恢復,這會比較快。主鍵查詢在innodb引擎下也會相當快,不過需要注意的是如果主鍵太長也會導致效能問題。

innodb和myisam是在使用mysql最常用的兩個表型別,它們各有各的優點,視具體應用而定。

innodb引擎(該引擎在5.5後的mysql資料庫中為預設儲存引擎。)

innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標就是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整的資料庫系統,mysql執行時,innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援fulltext型別的索引,而且它啟動也比較慢,不會儲存表的行數,當執行select count(*) from table指令時,需要掃瞄全表。當需要使用資料庫事務時,該引擎就是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高的場景下,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。大容量的資料集時趨向於選擇innodb。因為它支援事務處理和故障的恢復。innodb可以利用資料日誌來進行資料的恢復。主鍵的查詢在innodb也是比較快的。innodb引擎的索引的資料結構是b+樹,只不過資料結構中儲存的都是實際的資料,這種索引有被稱為聚集索引。

myiasm引擎(該引擎在5.5前的mysql資料庫中為預設儲存引擎。)

myisam沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵。因此當執行insert插入或update更新語句時,即執行寫操作需要鎖定整個表,所以會導致效率降低。不過和innodb不同的是,myisam引擎中儲存了表的行數,於是當執行select count(*) from table時,可以直接讀取已經儲存好的值而不需要進行全表掃瞄。所以,如果表的讀操作遠遠多於寫操作,而且不需要資料庫事務的支援,可以將myiasm作為資料庫引擎的首選。大批量的插入語句時(這裡是insert語句)在myiasm引擎中執行的比較快,但是update語句在innodb下執行的會比較快,尤其是在併發量大的時候。myiasm引擎,b+樹的資料結構中儲存的內容實際上是實際資料的位址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引。

區別介紹

1、myisam是非事務安全的,而innodb是事務安全的

2、myisam鎖的粒度是表級的,而innodb支援行級鎖

3、myisam支援全文型別索引,而innodb不支援全文索引

4、myisam相對簡單,效率上要優於innodb,小型應用可以考慮使用myisam

5、myisam表儲存成檔案形式,跨平台使用更加方便

使用場景:

1、myisam管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果在應用中執行大量select操作,應該選擇myisam

2、innodb用於事務處理,具有acid事務支援等特性,如果在應用中執行大量insert和update操作,應該選擇innodb

3、大尺寸的資料集趨向於選擇innodb引擎,因為它支援事務處理和故障恢復。資料庫的大小決定了故障恢復的時間長短,innodb可以利用事務日誌進行資料恢復,這會比較快。主鍵查詢在innodb引擎下也會相當快,不過需要注意的是如果主鍵太長也會導致效能問題。

mysql的兩種主要引擎

innodb引擎 該引擎在5.5後的mysql資料庫中為預設儲存引擎。innodb引擎提供了對資料庫acid事務的支援。並且還提供了行級鎖和外來鍵的約束。它的設計的目標就是處理大資料容量的資料庫系統。它本身實際上是基於mysql後台的完整的系統。mysql執行的時候,innodb會在記憶體中建立緩衝...

mysql的兩種主要引擎

innodb引擎 該引擎在5.5後的mysql資料庫中為預設儲存引擎。innodb引擎提供了對資料庫acid事務的支援。並且還提供了行級鎖和外來鍵的約束。它的設計的目標就是處理大資料容量的資料庫系統。它本身實際上是基於mysql後台的完整的系統。mysql執行的時候,innodb會在記憶體中建立緩衝...

mysql的兩種引擎 mysql的兩種儲存引擎

背景 最近在使用spring data jpa操作mysql,在使用jpa的自動建表功能之後,處理多對多關係 manytomany的時候,spring data jpa會給中間表的兩個欄位都加上外來鍵引用。當前使用的版本預設的資料庫儲存引擎為myisam。這種儲存引擎是為資料庫查詢效能而生的,不支援...