MySQL的索引和事務

目錄

1、索引

1.1 查看索引

1.2 創建索引

1.3 刪除索引

1.4 索引的實現

2、事務


1、索引

索引等同于目錄,屬于針對查詢操作的一個優化手段,可以通過索引來加快查詢的速度,避免針對表進行遍歷。

主鍵、unique和外鍵都是會自動生成索引的。

索引能提高查詢的速度,但也是有代價的。

1、占用更多的空間,生成索引是需要一系列的數據結構,以及一系列的額外的數據來存儲到硬盤空間。

2、可能會降低插入、修改、刪除的速度。

1.1 查看索引

使用 show index from 表名; 來查看索引

例如:


1.2 創建索引

使用 create index 索引名 on 表名(列名);?來創建索引

例如:

注意:

創建索引時,如果表中的數據很多,創建索引容易使服務器卡住,就需要另一臺機器,在MySQL中部署相同的表,創建所需要的索引,然后導入數據替換。


1.3 刪除索引

使用 drop index 索引名 on 表名;來刪除索引

自己創建的索引可以刪除,如果是自動創建的索引,不能刪除。

例如:


1.4 索引的實現

索引也是通過一定的數據結構實現的,MySQL的索引是一個改進的樹形結構 B+樹(N叉搜索樹)。

B樹

B樹是通過區間來進行分支的,每個節點的度都是不確定的,一個節點保存N個key,就可以劃分出N+1個區間,每個區間都可以衍生一系列的子樹。

一個節點中,雖然可以保存N個key,但不是無限制的,達到一定的規模,就會觸發節點的分裂,當刪除元素達到一定的數目,也會觸發節點的合并。

B樹(N叉搜索樹)

特點:

1、每個節點上有M個key,劃分出M+1個區間。

2、進行查詢的時候,根據根節點出發,判定當前要查的數據在節點的哪個區間內,再決定下一步往哪走。

3、進行添加和刪除元素時,可以涉及到節點的拆分和合并。


B+樹

B+樹的特點:

1、B+樹也是一個N叉搜索樹,一個節點上存在N個key,就劃分成N個區間。

2、每個節點上N個key中,最后一個就相當于當前子樹的最大值。

3、父節點上的每個key都會以最大值的身份在子節點的對應區間中存在,葉子節點這一層,包含整個樹的數據全集。

4、B+樹會使用鏈表這樣的結構,把葉子節點串起來,此時就可以非常方便的完成數據集合的遍歷,并且方便的從數據中按照范圍取出一個“子集”。

優點:

1、N叉搜索樹,樹的高度是有限的。

2、非常擅長范圍查詢

3、所有的查詢都是落在葉子節點上,查詢之間的開銷是穩定的。

4、由于葉子節點是全集,會把數據只存儲在葉子節點上,非葉子節點只存儲一個用來排序的key,所以非葉子節點用不了多少空間,就可以緩存在內存中,提升訪問的速度。


2、事務

事務可以把多個SQL語句打包成一個整體,可以保證這些SQL語句要么全部執行,要么一個都不執行,具有原子性的特點。

事務的執行過程:

開始事務:start transaction;

執行各種SQL語句

主動觸發回滾:rollback;

事務結束:commit;

事務的原理:

回滾以日志的方式,記錄事務中的關鍵操作,這樣的記錄是回滾的依據。然后以打印的方式,將內容放在文件中,即使主機掉電,也不會影響,一旦啟動主機,MySQL也會重新啟動,發生回滾操作。

事務的特點:

1、原子性:回滾的方式,保證操作都能執行正確。

2、一致性:事務執行前后,數據不能產生特別大的差異。

3、持久性:事務做出的修改,都是在硬盤上持久保存的,重啟服務器,修改仍然有效。

4、隔離性:數據并發執行多個事務時,并發程度越高,整體的效率就越高。


提高并發執行的程度,對提高效率,但也會產生一些問題。

1、臟讀問題

一個事務A正在寫數據的過程中,另一個事務B讀取了同一個數據,接下來事務A修改了數據,導致事務B讀到的數據是一個無效數據。

解決方法:

針對寫加鎖,等寫的操作完全執行結束,并且不再修改之后再讀,并發性降低了,隔離性提高了,效率降低了,準確性提高了。

2、不可重復讀

并發執行事務的過程中,如果事務A多次讀取同一個數據,出現不同的情況,就是不可重復讀,事務A再讀的過程中,事務B修改了數據并提交了數據。

解決方法:

針對讀操作進行加鎖,讀的時候不能再修改數據。

3、幻讀

一個事務A執行的過程中,兩次讀取操作,數據內容沒有改變,但是結果集變了,就稱為“幻讀”。

解決方法:

保持決定的串行執行事務,完全沒有并發,效率最低,隔離最高,內容最準確。


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

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

相關文章

Qt 驗證自動釋放 + 亂碼問題(6)

文章目錄 驗證自動釋放(對象樹上的對象)亂碼問題的緣由解決亂碼問題1. 使用QString2. qDebug() 小結 簡介:上一篇文章寫到,當new出一個控件對象并且將它掛到對象樹上,無需我們手動釋放該對象,是因為在一個合…

fastjson2 json.tojsonstring 會自動忽略過濾掉 key: null的數據

如果你想在序列化時保留值為 null 的字段,只要打開 Fastjson2 的 WriteNulls 特性即可。常見做法有兩種——按調用級別開啟,或全局開啟。 1. 在每次序列化時加 WriteNulls import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONWriter…

LeetCode熱題100--54.螺旋矩陣--中等

1. 題目 給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。 示例 1: 輸入:matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出:[1,2,3,6,9,8,7,4,5] 示例 2: 輸入:ma…

別卷手柄了!跨平臺VR遙操系統實現仿真

我們構建了一個基于 Quest 3 的 VR 遙操系統,該系統能夠同時支持 DISCOVERSE 仿真環境與 MMK2 真機的操控,實現了從虛擬環境到真實機器人系統的無縫對接。 ? 基于 VR 實現的遙操系統具有良好的擴展性和便攜性,為多場景應用提供了靈活的操作方…

Linux復習筆記(一)基礎命令和操作

遇到的問題,都有解決方案,希望我的博客能為你提供一點幫助。 一、Linux中的基礎命令和操作(約30%-40%) 1.用戶和組(5%左右) 1.1用戶簡介(了解) 要求:了解,知道有三個用戶…

【C語言干貨】野指針

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、什么是野指針?二、野指針的三大成因 1.指針未初始化2.指針越界訪問2.指針指向已釋放的內存 前言 提示:以下是本篇文章正文內容&…

Unity:Surface Effector 2D(表面效應器 2D)

目錄 什么是表面效應器 2D? 🎯 它是做什么的? 🧪 從第一性原理解釋它是怎么工作的 📦 重要參數解釋 為什么不直接用 Rigidbody(剛體)來控制運動 ? 所以什么時候該用哪個&#…

android 記錄應用內存

windows cmd下 30s 記錄一次 echo off setlocal enabledelayedexpansion set /a counter0 :loop echo %date% %time% >> meminfo.txt adb shell dumpsys meminfo packagename>> meminfo.txt timeout /t 30 /nobreak >nul set /a counter1 echo counter: !coun…

基于神經網絡的 YOLOv8、MobileNet、HigherHRNet 姿態檢測比較研究

摘要 隨著人工智能技術的飛速發展,基于神經網絡的姿態檢測技術在計算機視覺領域取得了顯著進展。本文旨在深入比較分析當前主流的姿態檢測模型,即 YOLOv8、MobileNet 和 HigherHRNet,從模型架構、性能表現、應用場景等多維度展開研究。通過詳…

解決HomeAssistant 無法安裝 samba share問題

最近家里樹莓派上的homeassistant 被折騰崩了,重新安裝過程中發現加載項“Official add-ons”里面的“samba share”、“file edit”、“Mosquitto broker”等常用組件都不能安裝。報以下錯誤: [supervisor.docker.interface] Cant install homeassista…

[Linux]從零開始的STM32MP157 Buildroot根文件系統構建

一、前言 在前面的教程中,教了大家如何移植一個LInux的內核并且正確啟動,我們發現Linux內核在啟動后會出現一個錯誤,提示我們沒有找到根文件系統。那么什么是根文件系統呢?之前我們使用Ubuntu編譯了STM32MP157的TF-A,UBOOT,LINUX內…

2025-05-07 學習記錄--Python-變量 + 常量 + 命名規則 + 變量的數據類型 + 數據類型

合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。💪🏻 一、變量 ?? 多個變量的賦值 🍭 二、常量 ?? 程序在運行的過程中,值永遠不會發生改變的量稱之為常量…

16.狀態模式:思考與解讀

原文地址:狀態模式:思考與解讀 更多內容請關注:深入思考與解讀設計模式 引言 在開發軟件系統時,特別是當對象的行為會隨著狀態的變化而變化時,系統往往會變得復雜。你是否遇到過這樣的情況:一個對象的行為在不同的狀…

從 Pretrain 到 Fine-tuning:大模型遷移學習的核心原理剖析

引言 在人工智能領域,大模型的出現掀起了一場技術革命。這些擁有海量參數的模型,如 GPT-4、PaLM 等,在眾多任務上展現出了驚人的能力。然而,訓練一個大模型需要耗費巨大的計算資源和時間,而且直接讓大模型處理特定領域…

Java詳解LeetCode 熱題 100(11):LeetCode 239. 滑動窗口最大值(Sliding Window Maximum)詳解

文章目錄 1. 題目描述2. 理解題目3. 解法一:暴力法3.1 思路3.2 Java代碼實現3.3 代碼詳解3.4 復雜度分析3.5 適用場景 4. 解法二:優先隊列(最大堆)4.1 思路4.2 Java代碼實現4.3 代碼詳解4.4 復雜度分析4.5 適用場景 5. 解法三&…

org.apache.poi——將 office的各種類型文件(word等文件類型)轉為 pdf

org.apache.poi——將 office的各種類型文件&#xff08;word等文件類型&#xff09;轉為 pdf 簡介使用方法word轉pdf 使用示例word轉pdf 簡介 使用方法 word轉pdf Maven坐標為 <dependency><groupId>com.documents4j</groupId><artifactId>documen…

二叉樹與優先級隊列

1.樹 樹是由n個數據構成的非線性結構&#xff0c;它是根朝上&#xff0c;葉朝下。 注意&#xff1a;樹形結構之中&#xff0c;子樹之間不能連接&#xff0c;不然就不構成樹形結構 1.子樹之間沒有交集 2.除了根節點以外&#xff0c;每一個節點有且只有一個父親節點 3.一個n個…

如何進行室內VR全景拍攝?

如何進行室內VR全景拍攝&#xff1f; 室內VR全景拍攝作為先進的視覺技術&#xff0c;能夠為用戶提供沉浸式的空間體驗。本文介紹如何進行室內VR全景拍攝&#xff0c;并闡述眾趣科技在這一領域的技術支持和服務優勢。 室內VR全景拍攝基礎 1. 室內VR全景拍攝概述 室內VR全景拍…

如何通過代理 IP 實現異地直播推流

在直播行業日益火爆的今天&#xff0c;許多主播希望突破地域限制&#xff0c;實現異地直播推流&#xff0c;以獲得更廣泛的觀眾群體和更好的直播效果。代理 IP 作為一種有效的網絡工具&#xff0c;能夠幫助主播輕松達成這一目標。本文將詳細介紹如何通過代理 IP 實現異地直播推…

隨機變量數字特征

主要介紹一維隨機變量期望和方差、二維隨機變量期望和方差、以及協方差相關公式&#xff0c;及推導。 一維隨機變量 以一個拋硬幣的場景作為例子&#xff0c;如下&#xff1a; 拋擲兩枚均勻硬幣&#xff0c;如果兩枚都是正面向上&#xff0c;則贏得2元&#xff0c;否則就輸掉…