MySQL的索引事務

索引

是什么

類似于目錄,提高查詢的速度,但是本身會占用空間,增刪數據的時候也需要維護索引。所以查詢操作頻繁的時候可以創建索引。如果非條件查詢列,或經常做插入、修改操作,或磁盤空間不足時,不考慮創建索引。

創建主鍵約束(primary key),唯一約束(unique),外鍵約束(foreign key)時會自動創建對應列索引。

查詢索引??

show index? ?from? 表名;

創建索引

當數據庫的數據量很大時,創建和刪除索引是很危險的操作,會大量消耗CPU,IO等資源,可能導致數據庫卡死。所以要在放入數據之前,或者數據庫中的數據量不大時創建索引。如果要給一個數據量很大的數據庫添加索引,就需要再準備一個服務器,在空的數據庫中創建好索引,將另一個數據庫的數據慢慢導入這個空的數據庫里。

create? ?index? ?索引名? ?on? ? 表名(列名?);//底層是創建出一棵獨立的B+樹來組織索引,跟主鍵的B+樹沒有關聯。是兩棵獨立的樹。

刪除索引

drop index? ?索引名? ? on? ?表名 ;

底層結構

數據庫的索引是用B+樹表示存儲的。

B+樹結構


僅葉子節點存儲數據并通過鏈表指針連接(葉子節點從左到右是有序的,且存儲在一塊連續內存空間,避免頻繁訪問硬盤,一次硬盤IO就能讀出整個節點數據;訪問的數據都在葉子節點,樹高一樣,則每次查詢次數是穩定的);

非葉子節點存儲鍵,鍵值為其葉子節點中的最大值(方便進行范圍查詢,鎖定葉子節點中數據的位置);

當葉子節點個數達到閾值,會進行分叉。(索引在內存中,個數增加了對速度影響不大,但葉子節點存在硬盤中,訪問硬盤的速度比訪問內存滿很多,所以要進行分叉,根據索引查找數據時范圍更精確)

1.N叉搜索樹(多叉樹可以控制樹的高度)

2.父節點以葉子節點中最大值的形式存在(快速鎖定子樹的數據范圍)

3.葉子節點這一層用鏈表結構連上,不用再回溯到父節點。(范圍查尋更高效)

4.數據存儲在葉子節點,索引存在非葉子節點中,因為占用空間小,索引就存在內存中。(索引在內存中加快查找速度)

為什么用B+樹,不用其他數據結構?

AVL樹是嚴格的自平衡二叉搜索樹(子樹高度差不能超過1),隨便進行一下增刪改就會觸發AVL樹旋轉。每一次旋轉都有對應的開銷,所以用AVL樹除了查詢外,其他操作的效率不高,每一次增刪都需要維護樹的平衡;

而紅黑樹雖然旋轉的概率沒有AVL樹高,但他是二叉樹,當數據量很大時,樹的高度就會很高,高度每增加一層,查詢比較次數就多一次,而數據庫數據索引是存儲在硬盤上的,每一次對硬盤的IO操作很耗時間,查詢的速度就會慢很多;

hash表存儲數據是無序的,不能進行范圍查詢(不能用>或者<找到一個范圍的數據),只能比較相同key值的數據,因為經過hash函數的計算,原來key之間的大小關系 已經不能通過計算出來的hash值反應了。

事務

什么是事務

當實現一個目的需要多個sql語句執行時,將這些sql語句打包成的一個整體,稱作事務。事務中的sql語句要么全部執行成功,要么全部失敗。對于轉賬這類場景,開啟事務更能保證安全。當A給B轉賬500,A的賬號-500,如果設備發生故障,sql沒執行完,B的賬戶沒有+500,如果沒有開啟事務,那么這500就消失了。開啟事務后,出現故障后,會撤銷對A賬戶執行的操作,將A賬號的金額還原到轉賬前。

使用

1.start? transaction ;//開啟事務

2.中間執行多個sql語句

3.rollback或commit??

rollback表示回滾,中間的sql語句全部執行失敗,commit表示提交,sql全部執行成功。

進行回滾了,name為a的數據沒有插入成功。

基本特性
1.原子性

事務里的sql語句執行要么都成功執行,要么都不執行。當一部分sql語句執行成功,出現網絡崩潰,計算機死機,主機掉電等操作時,像網絡崩潰這種不影響數據庫的,則會執行回滾操作,將已經執行的sql語句造成的影響恢復到沒執行時候的情況。當事務執行時,sql語句會記錄在mysql日志中,像主機掉電這種情況,數據庫沒辦法運行的時候,也不影響執行回滾操作,當電來了,恢復正常,數據庫會根據日志信息執行回滾。

2.一致性

執行事務之后,數據能對得上;事務沒執行成功,執行回滾后,能與執行事務之前數據一樣。

3.持久性

持久性指數據被存在硬盤上,主機/程序重啟后,數據依然存在。事務執行具有持久性,對數據庫造成的修改,會保存在硬盤上持久存在。

4.隔離性

在執行并發操作時存在的概念。隔離性提高,并發能力就降低,數據庫服務器執行效率就會降低,但數據準確性會提高?。當多個客戶端同時對服務器發起事務時,可能存在下面幾種情況

1.臟讀問題:讀取到其他事務未提交的數據

當執行事務A對某一張表做一些修改時,事務B在事務A還沒執行完就來讀取這張表的數據,但是B這時讀取的表的數據是臨時的,B如果基于這個臨時數據進行一些操作,結果可能不正確。這樣導致的問題稱作臟讀問題,這個臨時數據也稱‘臟數據’。

2.不可重復讀問題:指同一事務內相同查詢條件多次執行結果不同(數據值被修改)

當事務B有多個讀的操作時,有一個事務C要對這張 表做修改,這樣可能導致事務B多個讀的結果前后不一致。

3.幻讀問題:指同一事務內相同范圍查詢返回的行數發生變化(新增或刪除行),這是不可重復讀的特殊情況。

MySQL 的四個隔離等級

可以在MySQL的配置文件中設置等級

1.read uncommitted:允許讀取其他事務未提交的數據? ;//存在臟讀+不可重復讀+幻讀,

這樣就是降低了并發時事務之間的影響,提高了隔離性,犧牲了部分效率,提高了數據準確性。

2.read? committed:只能讀取其他事務提交后的數據;//解決臟讀 ,存在不可重復讀+幻讀,進一步降低了并發性,提高安全性。

3.repeatable? read: 針對讀和寫操作都加鎖了;//解決了臟讀+不可重復讀,存在幻讀問題 (MySQL默認隔離等級)

4.串行化(serialiable) :所有事務串行執行;//嚴格的一個接一個執行,這時完全沒有并發,也就不存在上訴三個問題;隔離性是最高的,效率是最低的。

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

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

相關文章

安卓9.0系統修改定制化____第三方美化 bug修復 移植相關 輔助工具 常識篇 八

在修改rom中。有時候不可避免的需要對系統進行美化以及一些第三方系統的bug修復。在操作前需要了解系統的一些基本常識。例如同平臺移植 跨平臺移植以及內核移植 apk反編譯等等相關的知識。今天解析的這款工具雖然不是直接面向安卓9.0.但對于了解以上的一些必備常識還是不錯的 …

云服務器與物理服務器對比:選擇最適合的業務服務器解決方案

更多云服務器知識&#xff0c;盡在hostol.com 在現代 IT 基礎設施中&#xff0c;云服務器與物理服務器是兩種常見的服務器解決方案。隨著云計算技術的迅猛發展&#xff0c;越來越多的企業開始轉向云服務器&#xff0c;但也有一些企業仍然堅持使用物理服務器&#xff0c;尤其是…

【redis使用場景——緩存——雙寫一致性】

redis使用場景——緩存——雙寫一致性 雙寫一致性問題的本質與場景典型不一致場景分析??并發寫操作導致的不一致????讀寫交叉導致的不一致????主從同步延遲導致的不一致?? 解決延遲雙刪策略&#xff08;推薦&#xff09;優點??&#xff1a;??缺點??&#xff…

【ArcGIS】在線影像底圖調用

【ArcGIS】在線影像底圖調用 一、 歷史影像的調用二、ArcGIS online底圖調用三、結語 一、 歷史影像的調用 ESRI官方推出了World Imagery Wayback是一個提供全球范圍內歷史影像的在線服務。 官網地址&#xff1a;https://livingatlas.arcgis.com/wayback/ 操作步驟&#xff1…

密度估計:從零星足跡重建整體畫像

想象你是一位偵探&#xff0c;案發現場只留下幾個零散的腳印。**如何通過這些碎片&#xff0c;推斷嫌疑人的身高體重&#xff1f;甚至預測他下一步的藏身之處&#xff1f;** 這種從局部反推整體的能力&#xff0c;正是**密度估計&#xff08;Density Estimation&#xff09;** …

B004基于STM32F401單片機簡易交通燈實訓數碼管顯示設計仿真資料

視頻演示地址:https://www.bilibili.com/video/BV1GvNDzFEd9/ 運行環境 仿真軟件:proteus8.17(切記別的版本不能運行) 編程軟件:MDK525 STM32 cubmx版本:6.11.1(切記別的版本不能運行) 原理圖畫圖軟件:AD10 功能說明&#xff1a; 以STM32F401CB單片機為核心簡易交通燈功能如下。…

沒掌握的知識點記錄

1、微內核的主要優點在于結構清晰、內核代碼量少&#xff0c;安全性和可靠性高、可移植性強、可伸縮性、可擴展性高&#xff1b;其缺點是難以進行良好的整體優化、進程間互相通信的開銷大、內核功能代碼不能被直接調用而帶來服務的效率低。 2、題目&#xff1a; 分頁內存管理…

linux 遠程終端執行qt應用顯示到接入的物理顯示器上

在顯示器打開終端執行&#xff1a; xhost local: 在遠程終端執行&#xff1a; export DISPLAY:0然后在終端執行qt應用就可以。 xhost local: 功能&#xff1a;允許本地用戶&#xff08;local:&#xff09;訪問 X 服務器&#xff08;X11 圖形系統&#xff09;。 原理&#xf…

【AI驅動網絡】

一、AI 驅動網絡 1.1 什么是網絡 1.1.1、網絡的定義 ?網絡是由若干節點?(如計算機、服務器、移動設備等)和連接這些節點的鏈路?(有線或無線傳輸介質)構成的系統,用于實現地理位置分散的獨立設備之間的信息交換、資源共享與協同工作。在計算機領域,網絡是信息傳輸、…

Python期末速成

一.基礎內容 賦值語句&#xff1a; a 1 b "mayday" 標識符規則&#xff1a; 1.字母&#xff0c;數字&#xff0c;下劃線&#xff0c;漢字組成。但數字不能開頭 2.不能是保留字 3.特殊符號不行&#xff0c;*&#xffe5;^等 注釋是在語句前面加&#xff03; …

【時時三省】(C語言基礎)指針變量例子

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 存放地址的變量是指針變量&#xff0c;它用來指向另一個對象&#xff08;如變量、數組、函數等&#xff09;。 那么&#xff0c;怎樣定義和使用指針變量呢? 先分析一個例子。 例題 通過…

MATLAB代碼演示,TDOA定位的優化算法,提升Z軸的定位精度|復現《基于最小二乘法的室內三維定位算法研究》

本文復現文章: 王桂杰,焦良葆,曹雪虹.基于最小二乘法的室內三維定位算法研究[J].計算機技術與發展,2020,30(04):69-73.按照文章的核心算法,復現了TDOA下的最小二乘在三維環境中的改進定位方法,方法可以明顯提升Z軸的定位精度 文章目錄 概述運行結果展示matlab代碼完整代碼概…

React useState 原理

Fiber架構 React16 之后 提升顯示性能 電腦屏幕參數刷新率 表示1s刷新次數 頁面渲染 和 JS代碼執行 共享一個線程 互斥 保持上一幀圖像表現&#xff1a;卡頓 reconcilier改為 stack 和 fiber Fiber數據結構 執行單元 瀏覽器優先執行用戶響應相關或者界面渲染相關事件&#…

【Datawhale組隊學習202506】零基礎學爬蟲 01 初始爬蟲

系列文章目錄 01 初始爬蟲 02 數據解析與提取 文章目錄 系列文章目錄前言1 爬蟲和Python2 爬蟲的矛盾2.1 爬蟲與反爬2.2 robots核心字段重要規則說明非標準擴展指令協議生效條件局限性驗證工具 2.3 一個爬蟲demo 3 Web請求與HTTP協議3.1 一個web請求的全過程3.2 判斷頁面源代碼…

前端面試十之vuex

Vuex 是一個專為 Vue.js 應用程序設計的狀態管理模式和庫&#xff0c;它集中管理應用的所有組件的狀態&#xff0c;并以相應的規則保證狀態以一種可預測的方式發生變化。以下是關于 Vuex 的詳細介紹&#xff1a; 1. 核心概念 State&#xff08;狀態&#xff09; 它是 Vuex 中存…

Django中為api自定義一些裝飾器:如參數校驗等

在Django中使用了rest_framework時&#xff0c;一般我們會定義ModelSerializer來校驗request.data中參數是否存在和參數類型。 但當我們只是想簡單校驗一些api的url上是否存在某些參數時&#xff0c;該怎么辦&#xff1f;當然我們也可以通過定義Serializer來實現&#xff0c;但…

uni-app項目實戰筆記21--uniapp緩存的寫入和讀取

一、緩存的寫入 uni.setStorageSync("storageClassList",classifyList.value) 二、緩存的讀取&#xff0c;如果緩存不存在&#xff0c;則返回空數組 const storageClassList uni.getStorageSync("storageClassList") || []; 三、對讀取到的數據進行轉…

Zama密碼分析資助計劃

1. 引言 2025年5月&#xff0c;Zama團隊正式啟動了 Zama 密碼分析資助計劃&#xff08;Cryptanalysis Grant Program&#xff09;&#xff0c;以支持那些致力于“破解”系統的研究人員&#xff1a; 無論是通過密碼分析、側信道攻擊、故障注入&#xff0c;還是其他創新性方法。…

【數據結構與算法】數據結構初階:詳解順序表和鏈表(一)

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為往圣繼絕學&#xff0c;為萬世開太平 前言&am…

Arrays.asList() 的不可變陷阱:問題、原理與解決方案

&#x1f6a8; Arrays.asList() 的不可變陷阱&#xff1a;問題、原理與解決方案 #Java集合 #開發陷阱 #源碼解析 #編程技巧 一、問題現象&#xff1a;無法修改的集合 當開發者使用 Arrays.asList() 轉換數組為集合時&#xff0c;嘗試添加/刪除元素會拋出異常&#xff1a; St…