mysql中四種存儲引擎的區別和選擇

来源:https://www.cnblogs.com/snake23/archive/2018/09/12/9635822.html
-Advertisement-
Play Games

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


前言

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

存儲引擎查看

MySQL給開發者提供了查詢存儲引擎的功能,我這裡使用的是MySQL5.1,可以使用:

SHOW ENGINES

命令來查看MySQL使用的引擎,命令的輸出為(我用的Navicat Premium):

wps164D.tmp

看到MySQL給用戶提供了這麼多存儲引擎,包括處理事務安全表的引擎和出來了非事物安全表的引擎。

如果要想查看資料庫預設使用哪個引擎,可以通過使用命令:

SHOW VARIABLES LIKE 'storage_engine';

來查看,查詢結果為:

wps165E.tmp

在MySQL中,不需要在整個伺服器中使用同一種存儲引擎,針對具體的要求,可以對每一個表使用不同的存儲引擎。Support列的值表示某種引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示該引擎為當前預設的存儲引擎 。下麵來看一下其中幾種常用的引擎。

InnoDB存儲引擎

InnoDB是事務型資料庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,上圖也看到了,InnoDB是預設的MySQL引擎。InnoDB主要特性有:

1、InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事物安全(ACID相容)存儲引擎。InnoDB鎖定在行級並且也在SELECT語句中提供一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在SQL查詢中,可以自由地將InnoDB類型的表和其他MySQL的表類型混合起來,甚至在同一個查詢中也可以混合

2、InnoDB是為處理巨大數據量的最大性能設計。它的CPU效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的

3、InnoDB存儲引擎完全與MySQL伺服器整合,InnoDB存儲引擎為在主記憶體中緩存數據和索引而維持它自己的緩衝池。InnoDB將它的表和索引在一個邏輯表空間中,表空間可以包含數個文件(或原始磁碟文件)。這與MyISAM表不同,比如在MyISAM表中每個表被存放在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限製為2GB的操作系統

4、InnoDB支持外鍵完整性約束,存儲表中的數據時,每張表的存儲都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行生成一個6位元組的ROWID,並以此作為主鍵

5、InnoDB被用在眾多需要高性能的大型資料庫站點上

InnoDB不創建目錄,使用InnoDB時,MySQL將在MySQL數據目錄下創建一個名為ibdata1的10MB大小的自動擴展數據文件,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日誌文件

MyISAM存儲引擎

MyISAM基於ISAM存儲引擎,並對其進行擴展。它是在Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事物。MyISAM主要特性有:

1、大文件(達到63位文件長度)在支持大文件的文件系統和操作系統上被支持

2、當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊自動完成

3、每個MyISAM表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16

4、最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,一個超過1024位元組的鍵將被用上

5、BLOB和TEXT列可以被索引

6、NULL被允許在索引的列中,這個值占每個鍵的0~1個位元組

7、所有數字鍵值以高位元組優先被存儲以允許一個更高的索引壓縮

8、每個MyISAM類型的表都有一個AUTO_INCREMENT的內部列,當INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被刷新。所以說,MyISAM類型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快

9、可以把數據文件和索引文件放在不同目錄

10、每個字元列可以有不同的字元集

11、有VARCHAR的表可以固定或動態記錄長度

12、VARCHAR和CHAR列可以多達64KB

使用MyISAM引擎創建資料庫,將產生3個文件。文件的名字以表名字開始,擴展名之處文件類型:frm文件存儲表定義、數據文件的擴展名為.MYD(MYData)、索引文件的擴展名時.MYI(MYIndex)

MEMORY存儲引擎

MEMORY存儲引擎將表中的數據存儲到記憶體中,未查詢和引用其他表數據提供快速訪問。MEMORY主要特性有:

1、MEMORY表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度

2、MEMORY存儲引擎執行HASH和BTREE縮影

3、可以在一個MEMORY表中有非唯一鍵值

4、MEMORY表使用一個固定的記錄長度格式

5、MEMORY不支持BLOB或TEXT列

6、MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引

7、MEMORY表在所由客戶端之間共用(就像其他任何非TEMPORARY表)

8、MEMORY表記憶體被存儲在記憶體中,記憶體是MEMORY表和伺服器在查詢處理時的空閑中,創建的內部表共用

9、當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的記憶體,應該執行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(使用DROP TABLE)

存儲引擎的選擇

不同的存儲引擎都有各自的特點,以適應不同的需求,如下表所示:

功 能

MYISAM

Memory

InnoDB

Archive

存儲限制

256TB

RAM

64TB

None

支持事物

No

No

Yes

No

支持全文索引

Yes

No

No

No

支持數索引

Yes

Yes

Yes

No

支持哈希索引

No

Yes

No

No

支持數據緩存

No

N/A

Yes

No

支持外鍵

No

No

Yes

No

如果要提供提交、回滾、崩潰恢復能力的事物安全(ACID相容)能力,並要求實現併發控制,InnoDB是一個好的選擇

如果數據表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率

如果只是臨時存放數據,數據量不大,並且不需要較高的數據安全性,可以選擇將數據保存在記憶體中的Memory引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果

如果只有INSERT和SELECT操作,可以選擇Archive,Archive支持高併發的插入操作,但是本身不是事務安全的。Archive非常適合存儲歸檔數據,如記錄日誌信息可以使用Archive

使用哪一種引擎需要靈活選擇,一個資料庫中多個表可以使用不同引擎以滿足各種性能和實際需求,使用合適的存儲引擎,將會提高整個資料庫的性能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料庫內容,隨機編了一些數據,其中認為兩個欄位Name、Address1一致為重覆記錄,保留其中一條 找出 刪除 刪除 2. ...
  • 1.數據Data 概念:數據是描述事物的符號記錄,包括數字、文字、圖形、圖像、聲音、視頻等。數據不僅有多種表現形式,而且需要進行語義解釋。 Exam. 數據:93 語義解釋:學生某門課的成績 2.資料庫Database 概念:資料庫是長期儲存在電腦內的、有組織的、可共用的大量數據的集合。 3.數據 ...
  • 周六的下午 ...
  • 在用mysql客戶端對資料庫進行操作時,打開終端視窗,如果一段時間沒有操作,再次操作時,常常會報如下錯誤: ERROR 2013 (HY000): Lost connection to MySQL server during query ERROR 2006 (HY000): MySQL serve ...
  • 1、jps發現namenode啟動失敗 每次開機都要重新格式化一下namenode才可以 其實問題出現自tmp文件上,因為每次開機就會被清空,所以現在我們配置一個tmp文件目錄。 如果之前沒有配置過,預設是在 /tmp 根目錄下的tmp文件下,我的tmp沒啥重要文件所以在配置之前,把裡面的文件清空了 ...
  • 以UTF-8為例: 測試字元串:☕️午後咖啡☕️ 一、編碼 輸出: %E2%98%95%EF%B8%8F%E5%8D%88%E5%90%8E%E5%92%96%E5%95%A1%E2%98%95%EF%B8%8F 二、解碼 ...
  • 下麵說下我遇到的場景,就是我通過資料庫自身的維護計劃建立了資料庫收縮自動計劃,卻發現資料庫並沒有實際性收縮。 前奏自動化配置流程 資料庫--管理 維護計劃--雙擊(維護計劃嚮導)--下一步--名稱:test 選擇一項或多項維護--收縮資料庫--下一步 資料庫:選擇(列表勾選)確定,設置當前資料庫大小 ...
  • 一、mysql多實例原理 在一臺伺服器上,mysql服務開啟多個不同的埠,運行多個服務進程。他們通過不同的 socket來監聽不同的埠互不幹擾地運行。 二、開發環境 ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/php7/apache2 三、配置步驟 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...