【後端面經-資料庫】MySQL的存儲引擎簡介

来源:https://www.cnblogs.com/CrazyPixel/archive/2023/06/09/17470535.html
-Advertisement-
Play Games

[TOC](【後端面經-資料庫】MySQL的存儲引擎簡介) # MySQL的存儲引擎 mysql主要有四類存儲引擎,目前主要使用InnoDB作為存儲引擎。 ## 0. 存儲引擎的查看和修改 - 查看當前資料庫的預設存儲引擎 ```sql show variables like 'default_st ...


目錄

MySQL的存儲引擎

mysql主要有四類存儲引擎,目前主要使用InnoDB作為存儲引擎。

0. 存儲引擎的查看和修改

  • 查看當前資料庫的預設存儲引擎
    show variables like 'default_storage_engine';
    
  • 查看當前資料庫所支持的存儲引擎
    show engine;//語句1
    show variables like 'have_%';//語句2
    
  • 查看支持事務處理的存儲引擎
    select engine from information_schema.engines where transactions='yes';
    
  • 設置新表的存儲引擎
    create table 表名 (欄位名 欄位類型) engine=存儲引擎;//語句1
    create table 表名 (欄位名 欄位類型) type=存儲引擎;//語句2
    

1. MyISAM

  1. 文件組成
    • .frm文件:表結構定義,frame,可以理解成對整體框架的存儲
    • .MYD文件:數據文件,存儲的是具體的資料庫數據條目
    • .MYI文件:索引文件,存儲的是資料庫表項的索引文件
      如果用圖書管理系統做比喻的話,那麼,.frm文件存放的是書架本身,.MYD文件存儲具體的書籍,.MYI文件存儲檢索書籍的索引目錄。
      .MYI文件.MYD文件可以存儲在不同的文件目錄中,從而分散IO讀寫壓力,提高訪問速度,具體操作可在創建表的時候,通過DATA DIRECTORYINDEX DIRECTORY屬性進行設置。
  2. 適用範圍
    由於MyISAM不支持事務,不支持外鍵,訪問速度快的特點,適用於以下特點的資料庫:
    - 不要求事務完整性
    - 操作主要是查找SELECTINSERT
  3. 安全性
    MyISAM表中有一個標誌,用於存儲上次退出表是否是正常退出,每次啟動該表之前會檢查該標誌,如果上次是異常退出,則考慮進行檢查和修複。
    可使用CHECK TABLEREPAIR TABLE命令進行表的檢查和修改。
  4. 支持的存儲格式
    • 靜態表:每個條目長度固定
    • 動態表:每個條目長度不固定
    • 壓縮表:壓縮存儲,節省空間

三者的特點如下所示:
在這裡插入圖片描述

  1. 優缺點
    1. 優點:訪問速度快,
    2. 缺點:不支持事務,不支持外鍵,不支持行級鎖,不支持崩潰後的安全恢復,不支持併發插入(性能方面)

2. InnoDB

  1. 自動增長列
    指的是InnoDB支持用戶手動插入的條目遵循索引項的自動增長,而不需要用戶自己設置。

    然而,在InnoDB中,自動增長列必須是索引項,如果是組合索引,則是其中的第一列;而對於MyISAM,則可以是任意數據項。

    創建一個表之後,其自動增長列的起始值預設是1,也可以在創建表的時候進行修改:

    CREATE TABLE t1 (
        id INT NOT NULL AUTO_INCREMENT,
        name CHAR(30) NOT NULL,
        PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=某個起始數字;
    

    在插入條目的時候,也可以通過ALTER TABLE命令進行修改:

    ALTER TABLE 具體條目 AUTO_INCREMENT=某個起始數字;
    
  2. 外鍵約束

    • 在本文介紹的四個存儲引擎中,只有InnoDB支持外鍵約束。
    • 外鍵約束可以指定數據表中,對父表的操作如何影響子表,具體參數如下:
      • restrict:父表的刪除和更新不會對子表產生影響
      • cascade:級聯操作,父表的刪除和更新操作會影響子表,
      • set null:父表的刪除和更新將會使得子表中相關條目設置為null
      • no action:效果等同於restrict,父表的刪除和更新操作不會對子表產生影響。
    • 外鍵約束的開關
      根據set forgein_key_checks=0或者1的值,可以開啟(值為1)或者關閉(值為0)外鍵約束。
  3. 優缺點

    1. 優點:支持回滾等事務處理
    2. 缺點:訪問效率低,花費記憶體存儲索引結構,占用記憶體較大

3. MEMORY

  1. 使用記憶體內容
    MEMORY表使用記憶體中的數據進行存儲管理,因此,在使用期間需要足夠的記憶體空間,當使用結束之後,需要進行記憶體釋放,命令如下
    DROP FROM MEMORY 表名;
    TRUNCATE table 表名;
    
  2. hash結構
    MEMORY表的索引結構為hash,因此,有很快的訪問速度,但是也引申出對於資料庫操作指令的響應性能問題:
    • 相等比較:=<=>,性能較好
    • 範圍比較:><BETWEENINLIKE,性能較差
    • 排序比較:order by,性能較差
      可通過改進為B樹結構來提高性能
  3. 文件組成:
    使用記憶體中的數據來存儲,只需要一個.frm文件,用於存儲表結構定義。
  4. 固定長度存儲
    創建該表的時候,需要設置固定長度,內部的條目長度固定,可設置最大行數來確定所需要的記憶體大小,max_heap_table_size參數用於設置最大行數。
    因此,對於TEXTBLOB等可變長度數據類型並不支持,但是對於VARCHAR數據類型,在實際的資料庫操作中依然看作固定長度,因此可支持VARCHAR數據類型。
  5. 優缺點
    根據上文的分析,可得出MEMORY表的優缺點如下:
    • 優點: 訪問速度快,使用hash存儲對於相等比較操作性能良好,使用記憶體中的數據而不用額外生成新文件
    • 缺點: 只支持固定長度的數據條目,對於可變長度的數據類型不支持,且使用hash索引,對於範圍、排序類的數據比較操作性能較差,需要額外釋放記憶體。

4. MERGE

  1. 文件組成
    • .frm: 存儲表的框架信息
    • .MRG:存儲表的定義信息
  2. 具體操作
    Merge存儲引擎相當於MyISAM的一個集合,需要多個表結構相同的MyISAM組合,本身並不存在數據,僅僅是一個結構,增刪改查等操作還是需要對於具體的MyISAM表進行操作。
  3. 優缺點
    • 優點: 管理多個MyISAM表,方便操作
    • 缺點: 本身是多個MyISAM表的複合表,因此,MyISAM表的缺點都有。

5. 總結

對上述四種存儲引擎進行比較,得出如下表格:
在這裡插入圖片描述

6. 參考博客


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

-Advertisement-
Play Games
更多相關文章
  • 【前言】 本文自1年前的1.0版本推出以來,已被業界大量科技公司採用。同時也得到了.Net圈內多位大佬的關註+推薦,文章也被多家頂級.Net/C#公眾號轉載。 現在更新到了7.0版本,更好的服務各位.Neter。 【正文】 支持.Net/.Net Core/.Net Framework,可以部署在D ...
  • #! https://zhuanlan.zhihu.com/p/635569763 # Excel DDE Commands ## 連接參數 `Application`: `Excel` `Topic`: `System`: 整個應用。 [sheetname] 指定 worksheet。 我使用的是 ...
  • # 一個超級大的文件如何更快讀 問題起因 ![](https://img2023.cnblogs.com/blog/2415052/202306/2415052-20230608110517159-989018809.png) 一個有千萬的數據的txt文件如何發揮IO的全部性能更快的讀和寫。 ## ...
  • 為什麼選擇FFmpeg? 延遲低,參數可控,相關函數方便查詢,是選擇FFmpeg作為編解碼器最主要原因,如果是處理實時流,要求低延遲,最好選擇是FFmpeg。 如果需要用Opencv或者C#的Emgucv這種庫來處理視頻流,也多是用FFmpeg做編解碼然後再轉換圖像數據給Opencv去處理。用Ope ...
  • 經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,... ...
  • 大家好,我是 god23bin。今天給大家帶來的是 Linux 命令系列,**每天只需一分鐘,記住一個 Linux 命令不成問題**。今天,我們要介紹的是一個常用且強大的命令:tar。 ...
  • 目錄 一、awk概念 二、awk的工作過程 三、awk字元 四、內置變數 五、getline 六、awk的精準篩選 七、例子演示 八、實驗演示 一、awk概念 1.概念:awk 是一個功能強大的編輯工具,逐行讀取輸入文本,主要作用於文件內容,AWK信息的讀入也是逐行指定的匹配模式進行查找, 對符合條 ...
  • 本篇首先介紹下EXTI的結構,接著介紹外部中斷的相關概念,對STM32的IO外部中斷EXTI有個初步的瞭解,在此基礎上重點圍繞IO外部中斷EXTI的使用展開分析。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...