關于Mysql基本概念的理解

系列文章
關于時間復雜度o(1), o(n), o(logn), o(nlogn)的理解

關于HashMap的哈希碰撞、拉鏈法和key的哈希函數設計

關于JVM內存模型和堆內存模型的理解

關于代理模式的理解

關于Mysql基本概念的理解

關于軟件設計模式的理解

文章目錄

  • 前言
  • 一、事務隔離級別
  • 二、存儲引擎
    • 1.事務支持
    • 2.行級鎖和表級鎖
  • 三、B+樹的索引結構以及索引覆蓋、回表查詢
    • 1.B+樹的索引結構
    • 2.理解索引覆蓋查詢和回表查詢
      • 覆蓋索引查詢
      • 回表查詢
  • 四、日志文件
  • 五、MVCC


前言

MySQL是眾多Java開發者首選的數據庫之一,因為其是一個開源的關系型數據庫管理系統,擁有龐大的用戶社區和活躍的開發者生態系統。在處理大規模數據和高并發請求時表現優異。與Java的兼容性非常好,提供了多種Java開發所需的接口和驅動程序。它提供了事務支持、ACID特性以及數據復制和故障恢復機制,確保數據的一致性、持久性和可靠性。同時,MySQL支持水平和垂直兩種方向的擴展,可以根據應用程序的需求進行靈活的擴展和配置。

一、事務隔離級別

MySQL默認的事務隔離級別是 “可重復讀”(Repeatable Read)。這意味著在同一個事務中,多次讀取相同的數據會得到相同的結果,即使其他事務對數據進行了修改或插入操作,也不會影響當前事務中的讀取結果。MySQL的可重復讀隔離級別通過使用快照讀(Snapshot Read) 和在事務中保持一致的讀取視圖來實現。。

二、存儲引擎

最常見的包括InnoDB和MyISAM,它們在設計和功能上有一些顯著的區別:

1.事務支持

InnoDB引擎支持事務,具有ACID(原子性、一致性、隔離性、持久性)特性,可以確保數據的完整性和一致性。而MyISAM引擎不支持事務,因此在需要事務支持的應用場景下不太適用。

2.行級鎖和表級鎖

InnoDB引擎支持行級鎖,可以在并發訪問時提高性能并減少鎖沖突。而MyISAM引擎只支持表級鎖,因此在高并發環境下可能會出現較多的鎖競爭,影響性能。

三、B+樹的索引結構以及索引覆蓋、回表查詢

1.B+樹的索引結構

B+ 樹是一種多路平衡查找樹,它的特點是非葉子節點存儲索引值,葉子節點存儲實際數據。
在 B+ 樹中,葉子節點之間通過指針進行連接,形成一個有序的鏈表,便于范圍查詢。
B+ 樹的非葉子節點通常稱為索引節點,葉子節點存儲數據,最底層的葉子節點稱為數據頁,存儲實際的數據記錄。

2.理解索引覆蓋查詢和回表查詢

覆蓋索引查詢

覆蓋索引查詢是指查詢操作所涉及的字段都包含在了索引中,查詢結果可以直接從索引中獲取的查詢操作。
在 B+ 樹結構中,覆蓋索引查詢可以直接在索引的葉子節點上完成。因為葉子節點存儲了索引字段的值以及數據行的指針或主鍵值,如果查詢所需的字段都在索引中,那么可以直接從葉子節點獲取這些值,并返回給用戶,無需額外的數據檢索操作。

回表查詢

回表查詢是指在使用索引進行查詢時,需要根據索引中的指針或主鍵值,再次到數據頁(葉子節點)中檢索實際的數據記錄,才能獲取查詢結果的查詢操作。
在 B+ 樹結構中,回表查詢涉及到從索引的葉子節點(包括底層葉子節點)回溯到對應的數據頁,然后再獲取實際的數據記錄。
回表查詢會在葉子節點和底層葉子節點之間發生,因為索引葉子節點中只存儲了索引字段的值和指向數據行的指針或主鍵值,而實際的數據記錄存儲在底層葉子節點中。因此,回表查詢的結果返回層級通常是底層葉子節點。

綜上所述,覆蓋索引查詢的結果返回層級通常是索引的葉子節點,而回表查詢的結果返回層級通常是底層葉子節點,因為回表查詢需要到底層葉子節點中獲取實際的數據記錄。

四、日志文件

在 MySQL 中,底層的日志文件主要包括以下幾種:

錯誤日志 (Error Log): 錯誤日志是 MySQL 服務器記錄所有錯誤、警告以及其他相關信息的文件。它包含了服務器啟動和運行過程中的診斷信息,以及一些重要事件的記錄。錯誤日志對于故障排除和性能優化非常重要。

查詢日志 (Query Log): 查詢日志記錄了所有到 MySQL 服務器的查詢請求,包括對數據庫的讀取和寫入操作。啟用查詢日志可以幫助跟蹤應用程序對數據庫的訪問情況,便于性能優化和安全審計。

慢查詢日志 (Slow Query Log): 慢查詢日志記錄了執行時間超過閾值的查詢語句。通過分析慢查詢日志,可以發現性能瓶頸,并對查詢進行優化,提高數據庫的響應速度。

二進制日志 (Binary Log): 二進制日志包含了對數據庫執行的所有更改操作,以二進制格式記錄。它用于數據復制(replication)、故障恢復以及點播(point-in-time recovery)等場景。通過二進制日志,可以在主服務器上記錄所有更改并將其傳輸到一個或多個從服務器,從而實現數據復制。

重做日志 (Redo Log): 重做日志記錄了已經提交的事務對數據庫所做的修改。它確保了事務的持久性,即使在系統崩潰或斷電時,MySQL 也能夠通過重做日志來恢復數據。

回滾日志 (Undo Log): 回滾日志記錄了事務執行過程中的撤銷操作,用于事務的回滾和 MVCC 的實現。它記錄了事務對數據的修改操作及其對應的版本信息,在事務回滾或系統崩潰時,可以利用回滾日志來恢復數據到事務開始之前的狀態。

這些日志文件在 MySQL 中起著不同的作用,對于數據庫的管理、維護和故障恢復都至關重要。

五、MVCC

MVCC(Multi-Version Concurrency Control)是MySQL等數據庫系統中用于實現并發控制的一種技術。它允許多個事務在同時對數據庫進行讀寫操作時,能夠達到較高的并發性而不產生數據不一致的問題。

MVCC的核心思想是在數據被修改時不直接覆蓋原始數據,而是創建新版本的數據,并且在事務開始時確定一個可見性規則,以確保事務只能看到適當版本的數據。這樣,在事務中對數據進行讀取時,可以根據事務開始時創建的一致性讀取視圖來獲取數據,而不會受到其他事務修改的影響。

下面是MVCC的幾個關鍵概念:

版本號: 每個數據行都會關聯一個版本號或者時間戳,用來標識該數據行的版本信息。當數據被修改時,會創建一個新的版本,并更新版本號。

數據行的狀態: 在MVCC中,數據行可以處于不同的狀態,比如已提交、未提交等。這些狀態可以用來判斷事務是否能夠看到該行的數據。

Read View(讀取視圖): 在事務開始時,MySQL會為當前事務創建一個一致的讀取視圖。這個讀取視圖包含了事務開始時數據庫中所有數據行的版本信息。在事務執行期間,該讀取視圖保持不變,以確保事務讀取到的數據是一致的。

可見性規則: 在MVCC中,對數據行的讀取要符合可見性規則。一般情況下,事務只能看到已提交狀態的數據,而看不到未提交或已經被刪除的數據。

MVCC的實現使得數據庫系統在并發訪問時能夠保持數據的一致性,并且提高了系統的并發性能。MySQL通過MVCC來實現不同的隔離級別,包括可重復讀隔離級別。通過維護一致的讀取視圖和版本控制,MySQL可以實現事務的隔離性,并且避免了讀取操作受到其他并發事務修改的影響。

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

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

相關文章

【Python爬蟲】案例_斗魚

聲明:案例只用于學習,不得惡意使用 要求:獲取直播間標題、類型、主播、熱度,并實現翻頁 定位隨著網站更新可能不會實現,請自行更改 from selenium import webdriver from selenium.webdriver.chrome.options import…

【uniapp】CSS實現多行文本展開收起的文字環繞效果

1. 效果圖 收起狀態 展開狀態 2. 代碼實現 <view class"word-wrap" id"descriptionTxt"><view class"fold-text" v-if"isFold"><text class"fold-btn" click"changFold">全文</text&g…

【網絡安全】Linux 應急響應-溯源-系統日志排查知識點

Linux 應急響應-溯源-系統日志排查知識點匯總 1. 查看當前已經登錄到系統的用戶 (w 命令) w2. 查看所有用戶最近一次登錄 (lastlog 命令) lastlog lastlog | grep -v "Never logged in"3. 查看歷史登錄用戶以及登錄失敗的用戶 (last 和 lastb 命令) last lastb4. …

使用docker完整搭建前后端分離項目

1、docker的優勢&#xff0c;為啥用docker 2、docker的核心概念 鏡像【Image】- 只讀模板 容器【Container】- 運行鏡像的一個外殼&#xff0c;相當于一個獨立的虛擬機 倉庫【repository】- 鏡像的管理工具&#xff0c;可公開&#xff0c;可私有&#xff1b;類似git倉庫 3、c…

【前端】js通過元素屬性獲取元素

【前端】js通過元素屬性獲取元素 <div for"hc_opportunity_config">aaaaa</div>//通過屬性獲取元素document.querySelector([for"hc_opportunity_config"]) document.querySelector([屬性"屬性值"])

操作教程|通過DataEase開源BI工具對接金山多維表格

前言 金山多維表格是企業數據處理分析經常會用到的一款數據表格工具&#xff0c;它能夠將企業數據以統一的列格式整齊地匯總至其中。DataEase開源數據可視化分析工具可以與金山多維表格對接&#xff0c;方便企業更加快捷地以金山多維表格為數據源&#xff0c;制作出可以實時更…

包拯斷案 | MySQL5.7替換路上踩過的坑 一鍵get解決辦法@還故障一個真相

提問&#xff1a;作為DBA運維的你&#xff0c;是否有過這些煩惱 1、業務系統進行替換投產時&#xff0c;發現數據庫回放并行度低 2、雖然2個數據庫集群使用同一份數據&#xff0c;卻在關閉雙一后&#xff0c;二級從庫的回放效率依舊緩慢&#xff0c;不知是什么原因&#xff1f…

機器人開源項目分享,助力一戶一機器人

最初&#xff0c;因隋煬帝思念心切&#xff0c;命工匠按照柳抃的形象制作了木偶機器人&#xff0c;被認為是歷史上最早的機器人之一。這些木偶機器人通過精巧設計的機關&#xff0c;能夠執行坐、起、拜、伏等動作。 如今&#xff0c;隨著科技的發展&#xff0c;機器人已經廣泛…

從ES5邁向ES6:探索 JavaScript 新增聲明命令與解構賦值的魅力

個人主頁&#xff1a;學習前端的小z 個人專欄&#xff1a;JavaScript 精粹 本專欄旨在分享記錄每日學習的前端知識和學習筆記的歸納總結&#xff0c;歡迎大家在評論區交流討論&#xff01; ES5、ES6介紹 文章目錄 &#x1f4af;聲明命令 let、const&#x1f35f;1 let聲明符&a…

Linux磁盤初始化與fstab文件更新

環境&#xff1a; Redhat 7.9 本文操作&#xff1a; >>給disk設置分區 &#xff08;fdisk&#xff09; >>給disk設置file system格式 (mkfs ) >>創建路徑&#xff0c;并將disk mount上(mkdir和mount ) >>修改fstab文件 初始化Disk 初始化前&#xff…

Vue組件通信 - 組件傳值 / 什么是組件

1.什么是組件通信&#xff1a; 組件&#xff08;.vue&#xff09;通過某種方式來傳遞信息以達到某個目的 2.組件通信可以解決什么問題&#xff1a; 每個組件之間都有獨立的作用域&#xff0c;組件間的數據是無法共享的&#xff0c;但在實際開發中我們常常需要讓組件之間共享…

【計算機網絡原理】對傳輸層TCP協議的重點知識的總結

?????? write in front ??????? ?????????大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之處請多多諒解&#xff0c;讓我們一起共同進步????? . ?? ?xiaoxie?????????—CSDN博客 本文由xiaoxie????????? 原創 CSDN 如…

Spring Bean Map漫游:遍歷背后的生命周期奧秘

1. 引言 在Spring框架中&#xff0c;Bean的生命周期是一個復雜而精妙的過程。其中&#xff0c;遍歷存儲Bean實例的Map&#xff08;通常是DefaultSingletonBeanRegistry中的singletonObjects&#xff09;是這一過程中的重要環節。理解這個遍歷過程以及它在Bean生命周期中的作用…

桌面文件不見了怎么恢復?五種方法解決文件恢復難題,建議收藏

不小心誤刪除了桌面文件&#xff0c;導致文件丟失。事實上誤刪的文件并沒有被永久刪除&#xff0c;而是被移動到了回收站中&#xff0c;可以恢復這些文件。本文將分享多種方法&#xff0c;具體步驟如下。 方法一&#xff1a;從回收站中恢復 大多數操作系統都有回收站或垃圾桶的…

【C語言】結構體內存對齊:熱門面試話題

&#x1f525;引言 書接上文&#xff0c;我們了解關于結構體的基本知識&#xff0c;這篇將深入剖析結構體中一個重要的知識點:內存對齊 關于內存對齊是屬于熱門面試話題&#xff0c;對此單獨放在一篇來分享 &#x1f308;個人主頁&#xff1a;是店小二呀 &#x1f308;C語言筆記…

3D工業視覺

前言 本文主要介紹3D視覺技術、工業領域的應用、市場格局等&#xff0c;主要技術包括激光三角測量、結構光、ToF、立體視覺。 一、核心內容 3D視覺技術滿足工業領域更高精度、更高速度、更柔性化的需求&#xff0c;擴大工業自動化的場景。 2D視覺技術基于物體平面輪廓&#…

軟件無線電學習-第二代移動通信系統過程理解

本文知識內容摘自《軟件無線電原理和應用》 無線通信領域讓大家感受最深的是民用移動通信的快速發展。民用移動通信在短短的二十年時間里已發展了三代&#xff1a;20世紀80年代的模擬體制(TACS/AMPS)為第一代移動通信(簡稱1G)&#xff1b;20世紀90年代的數字體制(GSMCDMATDMA)…

Git提交和配置命令

一、提交代碼到倉庫 在軟件開發中&#xff0c;版本控制是一個至關重要的環節。而Git作為目前最流行的版本控制系統之一&#xff0c;為我們提供了便捷高效的代碼管理和協作工具。在日常開發中&#xff0c;我們經常需要將本地代碼提交到遠程倉庫&#xff0c;以便于團隊協作和版本…

2024電工杯數學建模B題思路模型代碼

完整內容更新見文末名片 B 題&#xff1a;大學生平衡膳食食譜的優化設計及評價 大學時代是學知識長身體的重要階段&#xff0c;同時也是良好飲食習慣形成的重要時期。這一特 定年齡段的年輕人&#xff0c;不僅身體發育需要有充足的能量和各種營養素&#xff0c;而且繁重的腦…

Java基礎教程 - 9 集合

更好的閱讀體驗&#xff1a;點這里 &#xff08; www.doubibiji.com &#xff09; 更好的閱讀體驗&#xff1a;點這里 &#xff08; www.doubibiji.com &#xff09; 更好的閱讀體驗&#xff1a;點這里 &#xff08; www.doubibiji.com &#xff09; 9 集合 什么是集合&…