搜尋
首頁資料庫mysql教程【MySQL】MySQL的儲存引擎


在建立表格時可以指定表格的類型,也就是表格的儲存引擎。表的儲存引擎決定了資料如何儲存及如何訪問,還有事務如何儲存。表的儲存引擎在很大程度上影響著處理SQL語句所需的儲存空間和速度。不同的儲存引擎所具有的特性也有所不同,有些儲存引擎在處理許多複雜的SELECT語句時非常適合,而有些則在實現快速更新時比較適合。

InnoDB

InnoDB是MySQL的預設事務型引擎,也是最重要,使用最廣泛的儲存引擎。它被設計用來處理大量的短期(short-lived)事務,短期事務大部分情況下是正常提交​​的,很少會被回滾。 InnoDB的效能和自動崩潰復原特性,使得它在非事務型儲存的需求中也很流行。

除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮InnoDB引擎。 ————《高效能MySQL》

  • InnoDB採用MVCC來支援高並發,並且實現了四個標準的隔離等級。其預設等級是REPEATABLE READ(可重複讀取),並且透過間隙鎖定策略來防止幻讀的出現。

  • InnoDB表示基於群集索引建立的

  • #支援外鍵約束。

  • 支援自動增加列AUTO_INCREMENT屬性。

  • 事務。 InnoDB儲存引擎是支援事務的標準MySQL儲存引擎。

  • 刪除或增加索引時不需要複製全表資料。

InnoDB內部做了很多優化,包括從磁碟讀取資料時採用的可預測預讀,能夠自動在記憶體中建立hash索引以加速度操作的自適應雜湊索引,以及能夠加速插入操作的插入緩衝區。

InnoDB表是基於叢集索引建立的。 InnoDB的索引結構和MySQL的其他引擎有很大不同,叢集索引對主鍵查詢有很高的效能。但是二級索引中必須包含主鍵列,所以主鍵列很大的話,其他的所有索引都會很大。因此,若表上的索引較多的話,主鍵應盡可能的小。

MyISAM

MyISAM提供了大量的特性,包括全文索引,壓縮,空間函數(GIS)等,但MyISAM不支援交易和行級鎖,而且有一個毫無疑問的缺陷就是崩潰後無法安全恢復。在MySQL 5.1及以前的版本中MyISAM為預設的儲存引擎,正是由於該引擎的緣故,即使MySQL支援事務已經很久了,在許多人的概念中MySQL還是非事務型的資料庫。

  • MyISAM對整個表格加鎖,而不是針對行。

  • 支援全文索引。

  • 支援壓縮表。壓縮表是無法進行修改的,可以大幅減少磁碟空間佔用,因此也可以減少磁碟I/O操作,從而提升查詢效能。

儲存

MyISAM會將表格儲存在兩個檔案中:資料檔案和索引文件,分別以.MYD和.MYI為副檔名。 MyISAM表可以包含動態或靜態行。 MySQL會根據表格的定義來決定採用何種行格式。
在MySQL5.0中,MyISAM表如果是變長行,則預設配置只能處理256TB的資料

特性

作為MySQL最早的儲存引擎之一,還是有一些特性。

加鎖與並發–表鎖

  MyISAM對整張表加鎖,而不是針對行。讀取時會對需要讀到的所有表格加共用鎖定,寫入時則對錶加排他鎖。但在表有讀取查詢的同時,也可以往表中插入新的記錄(並發插入)。

修復

  對於MyISAM表,MySQL可以手動或自動執行檢查和檢修操作,但這裡所說的修復和事務恢復以及崩潰恢復是不同的概念。

索引特性

  對於MyISAM表,即使是BLOB和TEXT等長字段,也可以基於其前500個字元建立索引。 MyISAM也支援全文索引,這是一種基於分詞創建的索引,可以支援複雜的查詢。
延遲更新索引鍵
  建立MyISAM表的時候,如果指定了DELAY_KEY_WRITE選項,在每次修改執行完成時,不會立刻將修改的索引資料寫入磁碟。
  

MyISAM效能

MyISAM引擎設計簡單,資料以緊密格式存儲,所以在某些場景下的效能很好。但由於表鎖的存在對於性能有很大的影響。

Archive 引擎

Archive儲存引擎只支援INSERT和SELECT。 Archive引擎會快取所有的寫入並利用zlib對插入進行壓縮,所以比MyISAM表的磁碟I/O更少。但是每次SELECT查詢都需要執行全表掃描。所以Archive表適合日誌和資料擷取類別應用,這類應用做資料分析時往往需要全表掃描。

Archive引擎支援行級鎖和專用的緩衝區,所以可以實現高並發的插入。在一個查詢開始直到返回表中存在的所有的行數之前,Archive會阻止其他的SELECT執行,以實現一致性讀取。另外,也實作了批次插入在完成之前對讀取操作不可見。這種機制模仿了事務和MVCC的一些特性,但是Archive引擎不是一個事務型的引擎,而是一個針對高速插入和壓縮做了優化的引擎。

CSV儲存引擎

這個引擎可以將普通的CSV檔案當作MySQL的表格來處理,但這種表格不支援索引。只需要將CSV檔案copy到CSV儲存引擎的資料目錄下,就能使用在MySQL中已表格的規則開啟使用。

Memory引擎

如果需要快速地存取數據,並且這些數據不會被修改,重啟以後丟失也沒有關係,那麼使用Memory表是非常有用的。 Memory表比MyISAM表快一個數量級,因為所有資料都保存在記憶體中,不需要進行磁碟I/O操作。 Memory表的結構在重啟以後還會保留,但資料遺失。

  • 支援Hash索引,因此查找操作非常快速。

  • 是表格層級鎖定,因此並發寫入效能較低。

  • 不支援BLOB或TEXT類型的列,且每行長度是固定的,即使指定了varchar,實際儲存中也會轉換為char。

說明

除非需要用到某些InnoDB不具備的特性,並且沒有其他辦法可以替代,否則都應該優先選擇InnoDB引擎— 《高效能MySQL》

另外上面只是列舉了一些經常遇見的儲存引擎,並不全面。

在建立表格時可以指定表格的類型,也就是表格的儲存引擎。表的儲存引擎決定了資料如何儲存及如何訪問,還有事務如何儲存。表的儲存引擎在很大程度上影響著處理SQL語句所需的儲存空間和速度。不同的儲存引擎所具有的特性也有所不同,有些儲存引擎在處理許多複雜的SELECT語句時非常適合,而有些則在實現快速更新時比較適合。

InnoDB

InnoDB是MySQL的預設事務型引擎,也是最重要,使用最廣泛的儲存引擎。它被設計用來處理大量的短期(short-lived)事務,短期事務大部分情況下是正常提交​​的,很少會被回滾。 InnoDB的效能和自動崩潰復原特性,使得它在非事務型儲存的需求中也很流行。

除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮InnoDB引擎。 ————《高效能MySQL》

  • InnoDB採用MVCC來支援高並發,並且實現了四個標準的隔離等級。其預設等級是REPEATABLE READ(可重複讀取),並且透過間隙鎖定策略來防止幻讀的出現。

  • InnoDB表示基於群集索引建立的

  • #支援外鍵約束。

  • 支援自動增加列AUTO_INCREMENT屬性。

  • 事務。 InnoDB儲存引擎是支援事務的標準MySQL儲存引擎。

  • 刪除或增加索引時不需要複製全表資料。

InnoDB內部做了很多優化,包括從磁碟讀取資料時採用的可預測預讀,能夠自動在記憶體中建立hash索引以加速度操作的自適應雜湊索引,以及能夠加速插入操作的插入緩衝區。

InnoDB表是基於叢集索引建立的。 InnoDB的索引結構和MySQL的其他引擎有很大不同,叢集索引對主鍵查詢有很高的效能。但是二級索引中必須包含主鍵列,所以主鍵列很大的話,其他的所有索引都會很大。因此,若表上的索引較多的話,主鍵應盡可能的小。

MyISAM

MyISAM提供了大量的特性,包括全文索引,壓縮,空間函數(GIS)等,但MyISAM不支援交易和行級鎖,而且有一個毫無疑問的缺陷就是崩潰後無法安全恢復。在MySQL 5.1及以前的版本中MyISAM為預設的儲存引擎,正是由於該引擎的緣故,即使MySQL支援事務已經很久了,在許多人的概念中MySQL還是非事務型的資料庫。

  • MyISAM對整個表格加鎖,而不是針對行。

  • 支援全文索引。

  • 支援壓縮表。壓縮表是無法進行修改的,可以大幅減少磁碟空間佔用,因此也可以減少磁碟I/O操作,從而提升查詢效能。

儲存

MyISAM會將表格儲存在兩個檔案中:資料檔案和索引文件,分別以.MYD和.MYI為副檔名。 MyISAM表可以包含動態或靜態行。 MySQL會根據表格的定義來決定採用何種行格式。
在MySQL5.0中,MyISAM表如果是變長行,則預設配置只能處理256TB的資料

特性

作為MySQL最早的儲存引擎之一,還是有一些特性。

加鎖與並發–表鎖

  MyISAM對整張表加鎖,而不是針對行。讀取時會對需要讀到的所有表格加共用鎖,寫入時則對錶加排他鎖。但在表有讀取查詢的同時,也可以往表中插入新的記錄(並發插入)。

修復

  對於MyISAM表,MySQL可以手動或自動執行檢查和檢修操作,但這裡所說的修復和事務恢復以及崩潰恢復是不同的概念。

索引特性

  對於MyISAM表,即使是BLOB和TEXT等長字段,也可以基於其前500個字元建立索引。 MyISAM也支援全文索引,這是一種基於分詞創建的索引,可以支援複雜的查詢。
延遲更新索引鍵
  建立MyISAM表的時候,如果指定了DELAY_KEY_WRITE選項,在每次修改執行完成時,不會立刻將修改的索引資料寫入磁碟。
  

MyISAM效能

MyISAM引擎設計簡單,資料以緊密格式存儲,所以在某些場景下的效能很好。但由於表鎖的存在對於性能有很大的影響。

Archive 引擎

Archive儲存引擎只支援INSERT和SELECT。 Archive引擎會快取所有的寫入並利用zlib對插入進行壓縮,所以比MyISAM表的磁碟I/O更少。但是每次SELECT查詢都需要執行全表掃描。所以Archive表適合日誌和資料擷取類別應用,這類應用做資料分析時往往需要全表掃描。

Archive引擎支援行級鎖定和專用的緩衝區,所以可以實現高並發的插入。在一個查詢開始直到返回表中存在的所有的行數之前,Archive會阻止其他的SELECT執行,以實現一致性讀取。另外,也實作了批次插入在完成之前對讀取操作不可見。這種機制模仿了事務和MVCC的一些特性,但是Archive引擎不是一個事務型的引擎,而是一個針對高速插入和壓縮做了優化的引擎。

CSV儲存引擎

這個引擎可以將普通的CSV檔案當作MySQL的表格來處理,但這種表格不支援索引。只需要將CSV檔案copy到CSV儲存引擎的資料目錄下,就能使用在MySQL中已表格的規則開啟使用。

Memory引擎

如果需要快速地存取數據,並且這些數據不會被修改,重啟以後丟失也沒有關係,那麼使用Memory表是非常有用的。 Memory表比MyISAM表快一個數量級,因為所有資料都保存在記憶體中,不需要進行磁碟I/O操作。 Memory表的結構在重啟以後還會保留,但資料遺失。

  • 支援Hash索引,因此查找操作非常快速。

  • 是表格層級鎖定,因此並發寫入效能較低。

  • 不支援BLOB或TEXT類型的列,且每行長度是固定的,即使指定了varchar,實際儲存中也會轉換為char。

說明

除非需要用到某些InnoDB不具備的特性,沒有其他辦法可以替代,否則都應該優先選擇InnoDB引擎— 《高效能MySQL》

另外上面只是列舉了一些經常遇見的儲存引擎,並不全面。

 以上就是【MySQL】MySQL的儲存引擎的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL的許可與其他數據庫系統相比如何?MySQL的許可與其他數據庫系統相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

您什麼時候選擇InnoDB而不是Myisam,反之亦然?您什麼時候選擇InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中解釋外鍵的目的。在MySQL中解釋外鍵的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有哪些不同類型的索引?MySQL中有哪些不同類型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

您如何在MySQL中創建索引?您如何在MySQL中創建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL與Sqlite有何不同?MySQL與Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是什麼?它們如何提高性能?MySQL中的索引是什麼?它們如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

說明如何使用MySQL中的交易來確保數據一致性。說明如何使用MySQL中的交易來確保數據一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。