最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 學(xué)習(xí)總結(jié) 之 初步了解 InnoDB 存儲(chǔ)引擎的架構(gòu)設(shè)計(jì)

 更新時(shí)間:2020年02月10日 09:49:08   作者:不送花的程序猿  
這篇文章主要介紹了MySQL 學(xué)習(xí)總結(jié) 之 初步了解 InnoDB 存儲(chǔ)引擎的架構(gòu)設(shè)計(jì),文中給大家提到了mysql存儲(chǔ)引擎有哪些,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

一、存儲(chǔ)引擎

上節(jié)我們最后說到,SQL 的執(zhí)行計(jì)劃是執(zhí)行器組件調(diào)用存儲(chǔ)引擎的接口來完成的。
那我們可以理解為:MySQL 這個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)是依靠存儲(chǔ)引擎與存放數(shù)據(jù)的磁盤文件進(jìn)行交互的。

那么 MySQL 有哪些存儲(chǔ)引擎呢?

主要有 MyISAM、InnoDB、Memory等等。而現(xiàn)在互聯(lián)網(wǎng)中,基本都是使用 InnoDB 存儲(chǔ)引擎,所以接下來我將簡(jiǎn)單總結(jié)自己關(guān)于 InnoDB 存儲(chǔ)引擎的學(xué)習(xí),比較簡(jiǎn)單的介紹 InnoDB 存儲(chǔ)引擎里面的組件。

二、緩沖池

我們現(xiàn)在都知道了,數(shù)據(jù)庫(kù)的數(shù)據(jù)是存放在磁盤文件中的。
那么,我們每次對(duì)表的增刪改查都是直接在磁盤文件里面操作嗎?

答案:不是的!

因?yàn)榇疟P文件的隨機(jī)讀寫的性能是非常差的,如果所有操作都在磁盤中進(jìn)行,那么就不會(huì)有高性能 MySQL 的說法了,MySQL 也不能支持高并發(fā),也不會(huì)在互聯(lián)網(wǎng)中如此的流行。

這時(shí)候要引入 InnoDB 存儲(chǔ)引擎最重要的一個(gè)組件,就是緩沖池(Buffer Pool),它是一個(gè)非常重要的內(nèi)存結(jié)構(gòu)。它是內(nèi)存里面的,憑借著內(nèi)存非常高性能的讀寫,使得 MySQL 能夠支持高并發(fā)。

緩沖池(Buffer Pool) 的使用原理:

我們先復(fù)習(xí)一下 MySQL 接收請(qǐng)求的過程。

①、MySQL 的工作線程專門監(jiān)聽數(shù)據(jù)庫(kù)連接池的連接,有連接就獲取連接中的 SQL 語句。
②、然后將 SQL 語句交給 SQL 接口 去處理,SQL 接口里會(huì)進(jìn)行下面的一系列流程。
③、查詢解析器 將 SQL 語句解析成 MySQL 能理解的東西。
④、接著 查詢優(yōu)化器 去為 SQL 語句制定一套最優(yōu)的執(zhí)行計(jì)劃。
⑤、執(zhí)行器 會(huì)根據(jù)執(zhí)行計(jì)劃去調(diào)用存儲(chǔ)引擎的接口。

上面是上篇文章總結(jié)到的東西,那么存儲(chǔ)引擎的接口是怎么進(jìn)行增刪改查的呢?以更新操作為例,其他的同理。
首先,存儲(chǔ)引擎會(huì)先判斷更新 SQL 對(duì)應(yīng)的數(shù)據(jù)行是否在 緩沖池(Buffer Pool) 里面。如果在的話就直接在 緩沖池(Buffer Pool) 里更新數(shù)據(jù)然后返回;如果不在,則從磁盤文件里讀取數(shù)據(jù)到 緩沖池(Buffer Pool) 里,然后進(jìn)行更新操作,最后再返回結(jié)果。

三、undo 日志文件

我們都知道,在事務(wù)中,事務(wù)提交前是可以隨時(shí)回滾對(duì)數(shù)據(jù)的更新的。那么是依靠什么來做的呢?

依靠的是 undo 日志文件。

undo 日志文件的使用原理:

更新數(shù)據(jù)為例:
假如你更新某行 id=100 的數(shù)據(jù),將字段 name 由原來的“張三”改為“李四”,那么此時(shí)會(huì)將 "id=10" 和 “name=張三” 這兩個(gè)關(guān)鍵信息寫入 undo 日志文件中。
當(dāng)你事務(wù)提交前需要回滾,就會(huì)從 undo 日志文件 中找到這兩個(gè)關(guān)鍵字,然后進(jìn)行更新操作的回滾。

四、redo log buffer

上面說到,所有的增刪改查操作其實(shí)是在緩沖池里面進(jìn)行的,所以其實(shí)對(duì)數(shù)據(jù)的修改并沒有立刻落實(shí)到磁盤文件里面。

那么有一個(gè)問題:在緩沖池的臟數(shù)據(jù)刷回磁盤文件中前,MySQL 宕機(jī)了怎么辦?
此時(shí) InnoDB 存儲(chǔ)引擎提供了一個(gè)非常重要的組件,就是 redo log buffer 組件.,它也是內(nèi)存里的一塊緩沖區(qū)。

redo log buffer 的使用原理:

還是以上面的更新操作為例,當(dāng)數(shù)據(jù)更新后,會(huì)記錄下數(shù)據(jù)更新的的關(guān)鍵信息,對(duì)應(yīng)的就是 redo 日志,然后寫入 redo log buffer 里。

但是還是會(huì)有一個(gè)問題,上面說到,redo log buffer 也是在內(nèi)存里的。那當(dāng) MySQL 宕機(jī)時(shí),由于內(nèi)存里的所有數(shù)據(jù)都會(huì)丟失,所以緩沖池的臟數(shù)據(jù)和 redo log buffer 的日志還是會(huì)全部丟失。
這樣會(huì)造成一種情況,客戶端收到更新成功的信息了,但是最后數(shù)據(jù)庫(kù)里頭的數(shù)據(jù)還是沒更新成功。

所以,redo log buffer 還有一個(gè)刷盤策略。正常是,當(dāng)事務(wù)提交時(shí),會(huì)將 redo log buffer 里的 redo 日志 刷回到磁盤中,這樣就不用擔(dān)心,事務(wù)提交成功,但是更新數(shù)據(jù)可能會(huì)丟失的問題了。即使在 緩沖池(Buffer Pool) 的臟數(shù)據(jù)刷回磁盤前, MySQL 宕機(jī)了,也不會(huì)丟失數(shù)據(jù),因?yàn)?MySQL 重啟時(shí)可以根據(jù)磁盤中的 redo 日志 恢復(fù)之前所有臟數(shù)據(jù)的更新。

總結(jié)

以上所述是小編給大家介紹的MySQL 學(xué)習(xí)總結(jié) 之 初步了解 InnoDB 存儲(chǔ)引擎的架構(gòu)設(shè)計(jì),希望對(duì)大家有所幫助!

相關(guān)文章

  • MySQL性能分析及explain的使用說明

    MySQL性能分析及explain的使用說明

    本文我們主要介紹了MySQL性能分析以及explain的使用,包括:組合索引、慢查詢分析、MYISAM和INNODB的鎖定、MYSQL的事務(wù)配置項(xiàng)等,希望能夠?qū)δ兴鶐椭?/div> 2011-08-08
  • select?into?from和insert?into?select的區(qū)別舉例詳解

    select?into?from和insert?into?select的區(qū)別舉例詳解

    這篇文章主要介紹了SQL中的SELECT?INTO和INSERT?INTO?SELECT兩種語句的區(qū)別和用法,SELECT?INTO用于創(chuàng)建新表并復(fù)制數(shù)據(jù)到新表中,而INSERT?INTO?SELECT用于將數(shù)據(jù)從一個(gè)表插入到已存在的另一個(gè)表中,需要的朋友可以參考下
    2025-03-03
  • mysql中tonumber函數(shù)使用及注意事項(xiàng)

    mysql中tonumber函數(shù)使用及注意事項(xiàng)

    在MySQL中,沒有直接的TO_NUMBER函數(shù),但可以通過CAST或CONVERT實(shí)現(xiàn)字符串到數(shù)字的轉(zhuǎn)換,轉(zhuǎn)換前需明確數(shù)據(jù)類型,了解轉(zhuǎn)換語法,并注意錯(cuò)誤處理、空值處理、格式合規(guī)性和精度問題,本文介紹mysql中tonumber函數(shù)使用及注意事項(xiàng),感興趣的朋友一起看看吧
    2025-02-02
  • MySQL中的聯(lián)合索引學(xué)習(xí)教程

    MySQL中的聯(lián)合索引學(xué)習(xí)教程

    這篇文章主要介紹了MySQL中的聯(lián)合索引學(xué)習(xí)教程,其中談到了聯(lián)合索引對(duì)排序的優(yōu)化等知識(shí)點(diǎn),需要的朋友可以參考下
    2015-11-11
  • 淺析一個(gè)MYSQL語法(在查詢中使用count)的兼容性問題

    淺析一個(gè)MYSQL語法(在查詢中使用count)的兼容性問題

    本篇文章是對(duì)MYSQL語法(在查詢中使用count)的兼容性問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • MySQL的mysqldump工具用法詳解

    MySQL的mysqldump工具用法詳解

    這篇文章主要介紹了MySQL的mysqldump工具用法詳解,同時(shí)附帶了相關(guān)Source命令的用法,詳解需要的朋友可以參考下
    2015-07-07
  • mysql 中如何取得漢字字段的各漢字首字母

    mysql 中如何取得漢字字段的各漢字首字母

    這篇文章主要介紹了mysql中如何取得漢字字段的各漢字首字母,需要的朋友可以參考下
    2014-08-08
  • Mysql多層子查詢示例代碼(收藏夾案例)

    Mysql多層子查詢示例代碼(收藏夾案例)

    這篇文章主要介紹了Mysql多層子查詢示例代碼,以收藏夾案例給大家詳細(xì)介紹,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • win10下完全卸載+重裝MySQL步驟詳解

    win10下完全卸載+重裝MySQL步驟詳解

    小編是因?yàn)檫B接MySQL和Qt時(shí)出現(xiàn)問題,迫不得已選擇把64bitMySQL換成了32bitMySQL,在安裝過程中出現(xiàn)各種問題,下面小編把 win10下完全卸載+重裝MySQL步驟分享到腳本之家平臺(tái),需要的朋友參考下
    2017-12-12
  • 簡(jiǎn)單了解添加mysql索引的3條原則

    簡(jiǎn)單了解添加mysql索引的3條原則

    這篇文章主要介紹了簡(jiǎn)單了解添加mysql索引的3條原則,如果表中查詢的列有一個(gè)索引,MySQL能快速到達(dá)一個(gè)位置去搜尋到數(shù)據(jù)文件的中間,沒有必要看所有數(shù)據(jù),需要的朋友可以參考下
    2019-06-06

最新評(píng)論

黔江区| 鄂托克前旗| 五莲县| 雷山县| 郸城县| 伊吾县| 无极县| 峨眉山市| 宜宾市| 焦作市| 泰宁县| 武乡县| 得荣县| 布尔津县| 洛隆县| 苍溪县| 龙山县| 凉城县| 乡城县| 广丰县| 桃园市| 东方市| 长宁县| 日照市| 华池县| 绵阳市| 大丰市| 民权县| 房山区| 石门县| 荥阳市| 平凉市| 公主岭市| 博乐市| 华坪县| 疏附县| 定边县| 文化| 菏泽市| 鲁甸县| 册亨县|