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

2021-10-18 23:44:22 字數 1400 閱讀 5921

背景

最近在使用spring-data-jpa操作mysql,在使用jpa的自動建表功能之後,處理多對多關係@manytomany的時候,spring-data-jpa會給中間表的兩個欄位都加上外來鍵引用。當前使用的版本預設的資料庫儲存引擎為myisam。這種儲存引擎是為資料庫查詢效能而生的,不支援外檢、事務等一些高階資料庫功能,所以spring-data-jpa會報錯。因為本文所使用的是springboot所以解決的方法是在配置檔案中修改hibernate的方言:

# set mysql engine asinneodb

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.mysql5dialect

下面是兩個儲存引擎的區別:

構成上的區別

每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。 .frm檔案儲存表定義。 資料檔案的擴充套件名為.myd (mydata)。 索引檔案的副檔名是.myi (myindex)。 基於磁碟的資源是innodb表空間資料檔案和它的日誌檔案,innodb 表的大小只受限於作業系統檔案的大小,一般為 2gb

事務處理上方面

myisam型別的表強調的是效能,其執行數度比innodb型別更快,但是不提供事務支援innodb提供事務支援事務,外部鍵等高階資料庫功能

select,update ,insert, delete

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

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

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

對於使用的額外的innodb特性(例如外來鍵)的表不適用對auto_increment的操作。myisam為insert和update操作自動更新這一列這使得auto_increment列更快(至少10%)。在序列頂的值被刪除之後就不能再利用。(當auto_increment列被定義為多列索引的最後一列,可以出現重使用從序列頂部刪除的值的情況)。 auto_increment值可用alter table或myisamch來重置 對於auto_increment型別的字段,innodb中必須包含只有該字段的索引,但是在myisam表中,可以和其他字段一起建立聯合索引 更好和更快的auto_increment處理,如果你為乙個表指定auto_increment列,在資料詞典裡的innodb表控制代碼包含乙個名為自動增長計數器的計數器,它被用在為該列賦新值。 自動增長計數器僅被儲存在主記憶體中,而不是存在磁碟上 , select count() from table,myisam只要簡單的讀出儲存好的行數,注意的是,當count()語句包含 where條件時,兩種表的操作是一樣的 innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時。

mysql執行引擎 Mysql兩種引擎

innodb引擎 innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是...

MySQL兩種引擎的區別

innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援ful...

mysql的兩種主要引擎

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