自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL的InnoDB引擎原來是這樣的

數(shù)據(jù)庫 MySQL
為了保持數(shù)據(jù)的完整性,InnoDB支持外鍵約束。使用外鍵,插入、更新和刪除將被檢查,以確保它們不會導(dǎo)致相關(guān)表之間的不一致。有些生產(chǎn)環(huán)境不使用外鍵,以業(yè)務(wù)代碼維護表數(shù)據(jù)間關(guān)系。

大家都知道,對于面試官來說,沒有辦法能夠很直接的能問到面試者對于SQL的理解,所以就會有很多千奇百怪的問題就出現(xiàn)了,比如 SQL 優(yōu)化,索引創(chuàng)建原則,索引的最左匹配原則,唯一索引,聯(lián)合索引,甚至就開始詢問關(guān)于 MySQL 的存儲引擎了。

MYSQL 的存儲引擎

首先我們得先知道存儲引擎是什么,

百度百科是這么解釋的:

MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存)中。這些技術(shù)中的每一種技術(shù)都使用不同的存儲機制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術(shù),你能夠獲得額外的速度或者功能,從而改善你的應(yīng)用的整體功能。

阿粉不知道最近很火的 ChatGTP 是如何解釋這個存儲引擎的,但是在阿粉看來,他就是 MySQL將數(shù)據(jù)存儲在文件系統(tǒng)中的存儲方式或者存儲格式

又或者說,存儲引擎就是存儲數(shù)據(jù),建立索引,更新查詢數(shù)據(jù)等技術(shù)的實現(xiàn)方式 。存儲引擎是基于表的,而不是基于庫的。所以存儲引擎也可被稱為表類型。

也就是說,在一個數(shù)據(jù)庫中的多個表可以有不同的存儲引擎,這樣面試官再問的時候,可別說不可以。

既然我們知道了 MYSQL 的存儲引擎是什么了,那么就得來說說他的分類了。

MYSQL 存儲引擎分類:

  • InnoDB、
  • MyISAM、
  • MEMORY、
  • CSV、
  • BLACKHOLE、
  • FEDERATED、
  • MRG_MYISAM、
  • ARCHIVE、
  • PERFORMANCE_SCHEMA。

這么一看的話,MYSQL 的存儲引擎那分類也是很多樣的,這樣阿粉接下來就詳細的拆開,一個一個的說說他的存儲引擎,只講用的比較多的,其他的只做簡單了解就OK了,比較,如果要是你能和面試官就一兩個存儲引擎聊的非常透徹的話,那么相信你也入職也沒啥問題。

InnoDB 存儲引擎

首先第一點,mysql5.6 以上默認存儲方式就是使用的 InnoDB存儲引擎,而 InnoDB 存儲引擎的各方面的優(yōu)點也是非常多的,例如:

用于事務(wù)處理應(yīng)用程序,支持外鍵和行級鎖。如果應(yīng)用對事物的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性, 數(shù)據(jù)操作除了插入和查詢之外,還包括很多更新和刪除操作,那么 InnoDB 存儲引擎是比較合適的。

InnoDB 除了有效的降低由刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交和回滾, 對于類似計費系統(tǒng)或者財務(wù)系統(tǒng)等對數(shù)據(jù)準確要求性比較高的系統(tǒng)都是合適的選擇。

InnoDB 的行級別鎖定以及 Oracle 風(fēng)格的一致性無鎖讀提升了它的多用戶并發(fā)數(shù)以及性能。InnoDB 將用戶數(shù)據(jù)存儲在聚集索引中以減少基于主鍵的普通查詢所帶來的 I/O 開銷。為了保證數(shù)據(jù)的完整性,InnoDB 還支持外鍵約束。

我們也是可以通過 SQL 來查詢當(dāng)前數(shù)據(jù)庫默認的存儲引擎的,SQL 語句如下:

show variables like '%engine%';

上述語句是查詢默認使用的存儲引擎,而查詢當(dāng)前 MYSQL 支持的存儲引擎則是使用下面的語句:

show engines;

既然我們已經(jīng)都知道了關(guān)于這個 InnoDB 的相關(guān)特點了,那么接下來我們還得來看看這個關(guān)于 InnoDB 存儲引擎的磁盤結(jié)構(gòu)。

InnoDB磁盤主要包含Tablespaces,InnoDB Data Dictionary,Doublewrite Buffer、Redo Log 和Undo Logs。

Tablespaces:system表空間是InnoDB數(shù)據(jù)字典、doublewrite緩沖區(qū)、change緩沖區(qū)和undo日志的存儲區(qū)域。如果表是在系統(tǒng)表空間中創(chuàng)建的,而不是在每個表的文件或一般表空間中創(chuàng)建的話,它還可以包含表和索引數(shù)據(jù)。

InnoDB Data Dictionary:InnoDB數(shù)據(jù)字典由內(nèi)部系統(tǒng)表組成,其中包含用于跟蹤表、索引和表列等對象的元數(shù)據(jù)。元數(shù)據(jù)物理上位于InnoDB系統(tǒng)表空間中。由于歷史原因,數(shù)據(jù)字典元數(shù)據(jù)與InnoDB表元數(shù)據(jù)文件(.frm文件)中的信息存在一定程度的重疊。

Doublewrite Buffer:doublewrite緩沖區(qū)是一個存儲區(qū)域,InnoDB在將頁面寫到InnoDB數(shù)據(jù)文件中的適當(dāng)位置之前,在這個存儲區(qū)域中寫入從緩沖池中刷新的頁面。如果在頁寫過程中出現(xiàn)了操作系統(tǒng)、存儲子系統(tǒng)或意外的mysqld進程退出,InnoDB可以在崩潰恢復(fù)期間從doublewrite緩沖區(qū)中找到一個好的頁副本。

Redo Log:重做日志是一種基于磁盤的數(shù)據(jù)結(jié)構(gòu),在崩潰恢復(fù)期間用于糾正不完整事務(wù)寫入的數(shù)據(jù)。在正常操作過程中,重做日志對SQL語句或低級API調(diào)用產(chǎn)生的表數(shù)據(jù)更改請求進行編碼。在意外關(guān)閉之前未完成數(shù)據(jù)文件更新的修改將在初始化期間和接受連接之前自動重播。有關(guān)重做日志在崩潰恢復(fù)中的角色的信息。

Undo Logs:撤消日志是與單個讀寫事務(wù)相關(guān)聯(lián)的撤消日志記錄的集合。撤銷日志記錄包含關(guān)于如何撤銷事務(wù)對聚集索引記錄的最新更改的信息。如果另一個事務(wù)需要將原始數(shù)據(jù)作為一致讀操作的一部分來查看,則從撤消日志記錄中檢索未修改的數(shù)據(jù)。Undo日志存在于Undo日志段中,包含在回滾段中?;貪L段位于系統(tǒng)表空間、undo表空間和臨時表空間中。

下面是阿粉找的硬盤結(jié)構(gòu)圖:

圖片

關(guān)于 InnoDB 引擎,其實我們最主要掌握的就是他的一系列的特點,下面則是他的優(yōu)點:

它的DML操作遵循ACID(atomicity原子,consistency一致,isolation隔離,durability持久)模型,事務(wù)具有提交、回滾和崩潰恢復(fù)功能,以保護用戶數(shù)據(jù)。

并發(fā)性能好:行級鎖定和oracle風(fēng)格的一致讀取可以提高多用戶并發(fā)性和性能。

查詢性能好:InnoDB表在磁盤上排列數(shù)據(jù),以優(yōu)化基于主鍵的查詢。每個InnoDB表都有一個主鍵索引,稱為聚集索引,用于組織數(shù)據(jù)以最小化主鍵查找的I/O。

業(yè)務(wù)性能好:為了保持數(shù)據(jù)的完整性,InnoDB支持外鍵約束。使用外鍵,插入、更新和刪除將被檢查,以確保它們不會導(dǎo)致相關(guān)表之間的不一致。有些生產(chǎn)環(huán)境不使用外鍵,以業(yè)務(wù)代碼維護表數(shù)據(jù)間關(guān)系。

一般對于 InnoDB 掌握這些差不多也算是能應(yīng)對面試官的提問了,今天阿粉就先講到這里,之后繼續(xù)講解關(guān)于 MySQL 的其他的存儲引擎。

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2025-02-17 09:22:16

MySQLSQL語句

2024-02-06 09:30:25

Figma矩形矩形物理屬性

2022-05-05 08:55:12

工業(yè)物聯(lián)網(wǎng)IIoT

2023-05-22 15:58:11

2020-05-26 08:52:36

Java JVM多態(tài)

2018-04-02 15:13:21

網(wǎng)絡(luò)

2024-04-30 08:22:51

Figma圖形編輯變換矩陣

2023-02-15 08:17:38

2020-11-24 06:20:02

Linux日志文件系統(tǒng)

2016-10-12 08:54:24

2021-08-17 07:00:00

雙重檢查鎖Nacos

2014-07-21 10:32:52

蘋果公司實習(xí)

2020-03-23 08:30:12

程序員男友感受

2022-07-13 10:37:59

服務(wù)器故障優(yōu)化

2018-10-26 10:41:19

2015-03-25 09:55:34

程序員程序員修補BUG真正原因

2017-06-06 15:13:07

2021-02-07 08:13:18

@DateTimeFo@NumberFormSpring

2017-05-09 15:39:33

ensorFlow機器人機器學(xué)習(xí)

2011-05-25 09:58:46

C#
點贊
收藏

51CTO技術(shù)棧公眾號