《MySQL進階核心技術剖析(一): 存儲引擎》

目錄

一、存儲引擎

1.1 MySQL體系結構

1.2 存儲引擎介紹

1). 建表時指定存儲引擎

2). 查詢當前數據庫支持的存儲引擎

1.3 存儲引擎特點

1.3.1 InnoDB

1.3.2 MyISAM

1.3.3 Memory

1.3.4 區別及特點

1.4 存儲引擎選擇


一、存儲引擎

1.1 MySQL體系結構

1). 連接層 最上層是一些客戶端和鏈接服務,包含本地sock 通信和大多數基于客戶端/服務端工具實現的類似于 TCP/IP的通信。主要完成一些類似于連接處理、授權認證、及相關的安全方案。在該層上引入了線程 池的概念,為通過認證安全接入的客戶端提供線程。同樣在該層上可以實現基于SSL的安全鏈接。服務 器也會為安全接入的每個客戶端驗證它所具有的操作權限。

2). 服務層 第二層架構主要完成大多數的核心服務功能,如SQL接口,并完成緩存的查詢,SQL的分析和優化,部 分內置函數的執行。所有跨存儲引擎的功能也在這一層實現,如 過程、函數等。在該層,服務器會解 析查詢并創建相應的內部解析樹,并對其完成相應的優化如確定表的查詢的順序,是否利用索引等, 最后生成相應的執行操作。如果是select語句,服務器還會查詢內部的緩存,如果緩存空間足夠大, 這樣在解決大量讀操作的環境中能夠很好的提升系統的性能。

3). 引擎層 存儲引擎層, 存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API和存儲引擎進行通 信。不同的存儲引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的存儲引擎。數據庫 中的索引是在存儲引擎層實現的。

4). 存儲層數據存儲層, 主要是將數據(如: redolog、undolog、數據、索引、二進制日志、錯誤日志、查詢 日志、慢查詢日志等)存儲在文件系統之上,并完成與存儲引擎的交互。 和其他數據庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用并發揮良好作用。主要 體現在存儲引擎上,插件式的存儲引擎架構,將查詢處理和其他的系統任務以及數據的存儲提取分離。 這種架構可以根據業務的需求和實際需要選擇合適的存儲引擎

1.2 存儲引擎介紹

存儲引擎就是存儲數據、建立索引、更新/查詢數據等技術的實現方式 。存儲引擎是基于表的,而不是 基于庫的,所以存儲引擎也可被稱為表類型。我們可以在創建表的時候,來指定選擇的存儲引擎,如果 沒有指定將自動選擇默認的存儲引擎。

1). 建表時指定存儲引擎

CREATE TABLE 表名(

字段1 字段1類型 [ COMMENT 字段1注釋 ]

, ......

字段n 字段n類型 [COMMENT 字段n注釋 ] )

ENGINE = INNODB [ COMMENT 表注釋 ] ;

2). 查詢當前數據庫支持的存儲引擎

show enginee;

INNODB是默認的存儲引擎

1.3 存儲引擎特點

1.3.1 InnoDB

1). 介紹

InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在 MySQL 5.5 之后,InnoDB是默認的 MySQL 存儲引擎。

2). 特點

  • DML操作遵循ACID模型(原子性,一致性,隔離性,持久性),支持事務;
  • 行級鎖,提高并發訪問性能;
  • 支持外鍵FOREIGN KEY約束,保證數據的完整性和正確性;

3). 文件

xxx.ibd:xxx代表的是表名,innoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結 構(frm-早期的 、sdi-新版的)、數據和索引

參數:innodb_file_per_table

如果該參數開啟,代表對于InnoDB引擎的表,每一張表都對應一個ibd文件

4). 邏輯存儲結構

  • 表空間 : InnoDB存儲引擎邏輯結構的最高層,ibd文件其實就是表空間文件,在表空間中可以 包含多個Segment段。
  • 段 : 表空間是由各個段組成的, 常見的段有數據段、索引段、回滾段等。InnoDB中對于段的管 理,都是引擎自身完成,不需要人為對其控制,一個段中包含多個區。
  • 區 : 區是表空間的單元結構,每個區的大小為1M。 默認情況下, InnoDB存儲引擎頁大小為 16K, 即一個區中一共有64個連續的頁。
  • 頁 : 頁是組成區的最小單元,頁也是InnoDB 存儲引擎磁盤管理的最小單元,每個頁的大小默 認為 16KB。為了保證頁的連續性,InnoDB 存儲引擎每次從磁盤申請 4-5 個區。
  • 行 : InnoDB 存儲引擎是面向行的,也就是說數據是按行進行存放的,在每一行中除了定義表時 所指定的字段以外,還包含兩個隱藏字段(后面會詳細介紹)。

1.3.2 MyISAM

1). 介紹

MyISAM是MySQL早期的默認存儲引擎。

2). 特點

不支持事務,不支持外鍵 支持表鎖,不支持行鎖 訪問速度快

3). 文件

xxx.sdi:存儲表結構信息

xxx.MYD: 存儲數據

xxx.MYI: 存儲索引

1.3.3 Memory

1). 介紹

Memory引擎的表數據時存儲在內存中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為 臨時表或緩存使用。

2). 特點

內存存放 hash索引(默認)

3).文件

xxx.sdi:存儲表結構信息

1.3.4 區別及特點

特點INNODBMyT-SAMMemory
存儲限制64TB
事務安全支持不支持不支持
鎖機制行鎖表鎖表鎖
B-Tree索引支持支持支持
Hash索引不支持不支持支持
全文索引支持(5.6+)支持不支持
空間使用N/A
內存使用中等
批量插入速度
支持外鍵支持不支持不支持

面試題:

InnoDB引擎與MyISAM引擎的區別 ?

①. InnoDB引擎, 支持事務, 而MyISAM不支持。

②. InnoDB引擎, 支持行鎖和表鎖, 而MyISAM僅支持表鎖, 不支持行鎖。

③. InnoDB引擎, 支持外鍵, 而MyISAM是不支持的。

1.4 存儲引擎選擇

在選擇存儲引擎時,應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統,還可以根據 實際情況選擇多種存儲引擎進行組合。

  • InnoDB: 是Mysql的默認存儲引擎,支持事務、外鍵。如果應用對事務的完整性有比較高的要 求,在并發條件下要求數據的一致性,數據操作除了插入和查詢之外,還包含很多的更新、刪除操 作,那么InnoDB存儲引擎是比較合適的選擇。
  • MyISAM : 如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完 整性、并發性要求不是很高,那么選擇這個存儲引擎是非常合適的。
  • MEMORY:將所有數據保存在內存中,訪問速度快,通常用于臨時表及緩存。MEMORY的缺陷就是 對表的大小有限制,太大的表無法緩存在內存中,而且無法保障數據的安全性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91849.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sqli-labs:Less-26關卡詳細解析

1. 思路🚀 本關的SQL語句為: $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入類型:字符串型(單引號包裹)、GET操作提示:參數需以閉合關鍵參數:id php輸出語句的部分代碼&am…

Spring Boot 的事務注解 @Transactional 失效的幾種情況

開發中我們經常會用到 Spring Boot 的事務注解,為含有多種操作的方法添加事務,做到如果某一個環節出錯,全部回滾的效果。但是在開發中可能會因為不了解事務機制,而導致我們的方法使用了 Transactional 注解但是沒有生效的情況&…

#C語言——刷題攻略:牛客編程入門訓練(四):運算

🌟菜鳥主頁:晨非辰的主頁 👀學習專欄:《C語言刷題合集》 💪學習階段:C語言方向初學者 ?名言欣賞:"代碼行數決定你的下限,算法思維決定你的上限。" 目錄 1. BC25 牛牛買電…

阻抗分析中的軟件解調計算

接上篇 重溫無功功率測量-CSDN博客 已知被測阻抗兩端電壓與流過 通過兩個ADC同步采集到。 激勵頻率10k, 采樣率1M, 每周期100個點 關鍵是:采樣率除以激勵頻率, 得是4的倍數... 所以ADC不能自由運行, 得用一個timer來觸發. 因為要進行同相分量正交分量計算。 1:直…

ubuntu 鏡像克隆

一、克隆 1、準備 一個u盤(制作啟動盤) 一個移動固態硬盤(大于要克隆系統盤的1.2倍) 2、使用 rufus生成系統啟動盤 (1)下載ubuntu iso 桌面版 https://cn.ubuntu.com/download (2&#x…

Axure下拉菜單:從基礎交互到高保真元件庫應用

在Web端產品設計中,下拉菜單(Dropdown Menu) 是用戶與系統交互的核心組件之一,它通過隱藏次要選項、節省頁面空間的方式,提升信息密度與操作效率。無論是基礎下拉菜單、圖標式下拉菜單,還是復雜的多級下拉菜…

復現YOLOV5+訓練指定數據集

一、復現YOLOV5代碼 1.github下載:https://github.com/MIPIT-Team/SSA-YOLO 2.配置環境:創建虛擬環境yolo5 conda create -n yolo5 python3.9 #對應文件夾下pip install -r requirements.txt報錯:ERROR: pips dependency resolver does no…

Agents-SDK智能體開發[4]之集成MCP入門

文章目錄說明一 Agents SDK接入MCP1.1 MCP技術回顧1.2 MCP基礎實踐流程1.2.1 天氣查詢服務器Server創建流程1.2.2 服務器依賴安裝和代碼編寫1.2.3 環境配置文件1.2.4 客戶端代碼編寫1.3 測試運行二 MCPAgents SDK基礎調用2.1 weather_server.py2.2 client_agent.py2.3 運行測試…

Camera相機人臉識別系列專題分析之十九:MTK ISP6S平臺FDNode傳遞三方FFD到APP流程解析

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: Camera相機人臉識別系列專題分析之十九:MTK平臺FDNode傳遞三方FFD到APP流程解析 目錄 一、背景 二、:OcamMeta傳遞FFD到APP 2.1:OcamMeta 2.2 :OcamMeta::process更新FFD 2.…

【實時Linux實戰系列】構建實時監測與報警系統

在實時系統中,監測與報警系統是確保系統正常運行和及時響應異常情況的關鍵組件。實時監測與報警系統能夠實時收集系統數據,分析關鍵事件,并在檢測到異常時發出警報。這種系統廣泛應用于工業自動化、醫療設備監控、網絡安全等領域。掌握實時監…

PHP入門及數據類型

PHP數據類型 PHP標記 //HTML風格 <?phpecho "hello world"; ?> //簡短風格 <?echo "hello world"; ?>數據類型 PHP 最初源于 Perl 語言&#xff0c;與 Perl 類似&#xff0c;PHP 對數據類型采取較為寬松的態度。PHP 規定&#xff0c;變量數…

沸點 | 嬴圖參加世界人工智能大會

2025 WAIC于 7 月 26 日至 28 日在上海舉行。大會展覽面積突破 7 萬平方米&#xff0c;800 余家企業參展。嬴圖作為圖數據庫領域的領先企業&#xff0c;攜前沿技術與創新應用精彩亮相。?大會期間&#xff0c;嬴圖創始人兼CEO孫宇熙與來自全球的頂尖學者、企業代表共同探討人工…

2. 字符設備驅動

一、設備號 1.1. 什么是設備號 設備號是用來標記一類設備以及區分這類設備中具體個體的一組號碼。 設備號由主設備號和次設備號組成。主設備號的作用為標記一類設備、用于標識設備驅動程序,而次設備號的作用是為了區分這類設備中的具體個體設備及用于標識同一驅動程序下的具…

uboot armv8 啟動流程之 linker script

section 詳細說明.text按如下順序&#xff0c;中斷向量表vectors, 啟動入口代碼start.o,普通text, glue &#xff08;arm thumb2 相互調用時自動生成的代碼&#xff09;*(.vectors)CPUDIR/start.o (.text*)*(.text*)*(.glue*)__image_copy_start 標記為text 段入口&#xff0c;…

xxljob總結

XXL-Job 支持多種任務類型&#xff0c;以下是常見任務類型的示例 Demo&#xff0c;包含核心配置和代碼片段&#xff0c;幫助快速理解用法&#xff1a;一、Bean模式任務&#xff08;最常用&#xff09;通過注解 XxlJob 定義任務方法&#xff0c;直接在 Spring 容器中管理&…

Python包安全工程實踐:構建安全可靠的Python生態系統

在現代計算環境中&#xff0c;性能往往是Python包成功的關鍵因素。本文將深入探討Python包的性能優化技術&#xff0c;包括并發編程模型、性能分析工具、內存優化策略以及原生代碼集成等高級主題&#xff0c;幫助你構建高性能的Python組件。1. 性能分析基礎1.1 性能分析工具矩陣…

kubernetes基礎知識

個人博客站—運維鹿: http://www.kervin24.top CSDN博客—做個超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog一、kubernetes介紹Kubernetes本質是一組服務器集群&#xff0c;它可以在集群的每個節點上運行特定的程序&#xff0c;來對節點中的容器進行…

winntsetup安裝驅動和光驅安裝F6功能一樣----NT5.2.3790源代碼分析

D:\drv>dir驅動器 D 中的卷是 新加卷卷的序列號是 443D-D64BD:\drv 的目錄2025-08-03 23:57 <DIR> . 2025-08-03 23:57 <DIR> .. 2008-05-27 10:01 119,068 yk51x86.cat 2008-05-20 10:01 969,380 yk51x86.inf…

Web 開發 11

今天完成了workshop2&#xff0c;進度有點慢&#xff0c;但是記錄一下極為愚蠢的一輪輪問答和思考~&#xff01;&#xff08;還是有點成就感的&#xff09;ps&#xff1a;【】內為我的提問1 導入語句&#xff08;ES6 模塊導入語法&#xff09;【import CatHappiness from "…

寫作路上的迷茫與突破

曾經&#xff0c;我也是那個在寫作面前躊躇不前的人。每次提筆&#xff0c;滿心都是“我寫不好”“我沒什么可寫的”“我達不到別人的高度”……這些念頭像藤蔓一樣&#xff0c;緊緊纏繞著我&#xff0c;讓我寸步難行。我看著群里的小伙伴們一個個妙筆生花&#xff0c;自己卻只…