MySQL-存儲引擎和索引

1.MySQL的基礎架構是什么?

在這里插入圖片描述

MySQL由連接器、分析器、優化器、執行器和存儲引擎這五部分構成。

一條SQL的執行流程:

  1. 通過連接器連接數據庫,檢查用戶名和密碼,以及權限校驗,是否有增刪改查的權限。
  2. 在MySQL8.0之前,連接完數據庫后會先判斷緩存是否有數據,如果執行過這個SQL語句,直接返回。8.0之后沒有了緩存,直接進入分析器,進行詞法分析判斷執行的什么操作,語法分析檢查語句是否存在問題。
  3. 進入優化器,選擇合適的索引以及查詢的順序,由優化器指定執行計劃。
  4. 進入執行器之前先進行權限校驗,權限信息是從連接器中取出來的,權限沒問題就開始執行。
  5. 最后由存儲引擎負責讀寫數據,MySQL默認的存儲引擎是InnoDB,采用Buffer Pool來減少對磁盤的直接I/O,并通過redo logundo log來保證事務的持久性和原子性。

SQL語句的執行順序是From子句返回初始結果集,WHERE子句排除不滿足條件的行,GROUP BY子句進行分組,HAVING子句排除不滿足條件的組,最后經過ORDER BY子句對結果集進行排序。

2.MySQL中有哪些存儲引擎?

MySQL中的存儲引擎是插件式的,可以為不同的數據庫表設置不同的存儲引擎。主要有四種存儲引擎,InnoDBMyISAMMemoryArchive

  1. InnoDB是支持事務完整的ACID特性的,MyISAM、Memory和Archive都不支持事務。
  2. InnoDB和Archive采用的是行級鎖,而MyISAM和Memory采用的是表級鎖。
  3. InnoDB支持外鍵,保證數據的完整性,而其它的存儲引擎都不支持外鍵。
  4. InnoDB通過redo logundo log來實現崩潰后的自動恢復,其他幾種存儲引擎不支持崩潰后的自動恢復。
  5. InnoDB的存儲方式是數據與索引一體,MyISAM是數據與索引分離。Memory存儲在內存,Archive進行壓縮存儲。
  6. InnoDB主要用于高并發的場景下,MyISAM適合靜態讀,Memory適合存放臨時數據,Archive存放歸檔數據。

3.什么是MySQL索引?

創建索引的目的就是加快檢索速度,但是維護索引需要耗費性能。

  1. MySQL索引默認采用的數據結構是B+樹,B+樹的數據全部存放在葉子節點上,這樣就可以組織更寬的樹,樹高就會降低,減少磁盤I/O。
  2. B+樹采用雙向鏈表,非常適合范圍查詢和排序。

4.什么是二級索引(非聚簇索引)?

非聚簇索引就是非主鍵做為索引,可以有多個,葉子節點存放的是主鍵值

5.什么是聚簇索引?

聚簇索引就是將主鍵做為索引,只能有一個,葉子節點存放的是整行數據。如果表中沒有主鍵,默認使用唯一字段做為索引,如果沒有唯一字段就采用隱藏字段rowid做為索引。

6.什么是回表查詢?

回表查詢就是通過非聚簇索引找到主鍵值,再通過聚簇索引找到對應的數據。非聚簇索引不一定回表查詢,比如查詢用戶名,用戶名正好建立了索引,直接返回就可以。

7.什么是覆蓋索引?

覆蓋索引就是查詢使用了索引,返回的字段必須在索引中全部找到。覆蓋索引查詢就是一次性查詢,不需要回表查詢。如果我們使用主鍵進行查詢,那么就會采用聚簇索引返回所有字段的數據,這就是覆蓋索引查詢。

8.什么是聯合索引?

聯合索引就是多個字段創建的索引,相比于單列索引,每個索引對應一顆B+樹,而聯合索引只需要一顆B+樹。最左匹配原則就是在使用聯合索引時,MySQL會按照字段的順序,從左到右依次查詢字段。需要注意的是,如果查詢條件中存在范圍查詢,從這個范圍列開始就不會繼續向后匹配索引了。我們在使用聯合索引的時候,將區分度最高的字段放到左邊,這樣可以過濾更多的數據。

9.如何選擇合適的字段創建索引?

  1. 選擇不為NULL的字段
  2. 選擇查詢頻繁的字段
  3. 選擇做為查詢條件的字段
  4. 選擇頻繁排隊的字段

10.什么情況下索引會失效?

  1. 組合索引未遵循最左匹配原則
  2. 索引上進行計算、類型轉換等操作
  3. 使用%開頭的LIKE模糊查詢
  4. 查詢條件使用OR但是有一列沒有索引

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

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

相關文章

安卓性能調優之-掉幀測試

掉幀指的是某一幀沒有在規定時間內完成渲染,導致 UI 畫面不流暢,產生視覺上的卡頓、跳幀現象。 Android目標幀率: 一般情況下,Android設備的屏幕刷新率是60Hz,即每秒需要渲染60幀(Frame Per Second, FPS&a…

【運維自動化-標準運維】職能化功能如何使用?

職能化功能主要用于一些固化的標準流程可以通過權限開放的方式給到那些負責固定職能的非運維人員,比如外包操作員來執行操作,如此可以釋放一些運維的人力,讓其可以專注流程的建設和優化。實操演示 新建職能化流程(運維角色操作&a…

游戲引擎學習第224天

回顧游戲運行并指出一個明顯的圖像問題。 回顧一下之前那個算法 我們今天要做一點預加載的處理。上周剛完成了游戲序章部分的所有剪輯內容。在運行這一部分時,如果觀察得足夠仔細,就會注意到一個問題。雖然因為視頻流壓縮質量較低,很難清楚…

【小沐學GIS】基于C++繪制三維數字地球Earth(QT5、OpenGL、GIS、衛星)第五期

🍺三維數字地球系列相關文章如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第二期3【小沐學GIS】…

OpenAI 最新發布的 GPT-4.1 系列在 API 中正式上線

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

【力扣】day1

文章目錄 27.移除元素26. 刪除有序數組的重復項 27.移除元素 26. 刪除有序數組的重復項 我們仔細看一下這兩道題的最后的返回值,為什么第一題返回slow 而第二題返回slow1 最后的返回值該如何返回絕對不是憑感覺,我們自己分析一下第一個slow,從0位置開始, 遇到val值就開始和fas…

完全無網絡環境的 openEuler 系統離線安裝 ClamAV 的詳細步驟

準備工作(在外網機器操作) 1. 下載 ClamAV RPM 包及依賴 mkdir -p ~/clamav-offline/packages cd ~/clamav-offline/packages# 使用 yumdownloader 下載所有依賴包(需提前安裝 yum-utils) sudo dnf install yum-utils -y sudo y…

3.2.2.2 Spring Boot配置視圖控制器

在Spring Boot中配置視圖控制器可以簡化頁面跳轉跳邏輯。通過實現WebMvcConfigurer接口的addViewControllers方法,可以直接將URL映射到特定的視圖,而無需編寫控制器類。例如,將根路徑"/"映射到welcome.html視圖,當訪問應…

數據庫—函數筆記

一,數據庫函數的分類 內置函數(Built-in Functions) 數據庫系統自帶的函數,無需額外定義即可直接調用。 聚合函數:對數據集進行計算(如 SUM, AVG, COUNT)。 字符串函數:處理文本數據…

YOLOv2訓練詳細實踐指南

1. YOLOv2架構與原理詳解 1.1 核心改進點 YOLOv2相比YOLOv1的主要改進: 采用Darknet-19作為backbone(相比VGG更高效)引入Batch Normalization提高穩定性與收斂速度使用anchor boxes機制代替直接預測邊界框引入維度聚類確定anchor boxes尺寸…

詳解如何復現DeepSeek R1:從零開始利用Python構建

DeepSeek R1 的整個訓練過程,說白了就是在其基礎模型(也就是 deepseek V3)之上,用各種不同的強化學習方法來“雕琢”它。 咱們從一個小小的本地運行的基礎模型開始,一邊跟著 DeepSeek R1 技術報告 的步驟,…

MCP Server 開發實戰 | 大模型無縫對接 Grafana

前言 隨著大模型的飛速發展,越來越多的 AI 創新顛覆了過往很多產品的使用體驗。但你是否曾想過,在向大型語言模型提問時,它能否根據你的需求精準返回系統中的對應數據?例如,當用戶查詢 Grafana 服務時,模型…

塊存儲、文件存儲和對象存儲的特點、應用場景及區別

塊存儲、文件存儲和對象存儲的特點、應用場景及區別 塊存儲 特點:塊存儲將數據分割成固定大小的塊,每個塊都有唯一的標識符。數據以塊為單位進行讀寫操作,適合需要高性能和低延遲的場景。 應用場景:數據庫存儲、虛擬機磁盤、高性能…

OpenCv--換臉

引言 在當今數字化時代,圖像處理技術的發展日新月異。換臉技術作為其中一項極具趣味性和挑戰性的應用,吸引了眾多開發者和愛好者的目光。OpenCV 作為一款強大的開源計算機視覺庫,為我們實現換臉提供了豐富的工具和方法。本文將深入探討如何使…

安卓基礎(SQLite)

基礎 import sqlite3# 連接到數據庫 conn sqlite3.connect(mydatabase.db) cursor conn.cursor()# 執行查詢 cursor.execute("SELECT * FROM users") rows cursor.fetchall()for row in rows:print(row)# 關閉連接 conn.close() 創建一個繼承自 SQLiteOpenHelpe…

QuickAPI 核心能力解析:構建數據服務化的三位一體生態

在企業數據資產化運營的進程中,如何打破數據開發與共享的效率瓶頸,實現從 “數據可用” 到 “數據好用” 的跨越?麥聰軟件的 QuickAPI 給出了系統性答案。作為 SQL2API 理念的標桿產品,QuickAPI 通過SQL 編輯器、數據 API、數據市…

《計算機視覺度量:從特征描述到深度學習》—生成式人工智能在工業檢測的應用

2022 年 11 月 30 日一個很重要的標志事件就是chatgpt的出現,打開了生成式人工智能的開端。這也許會是一個歷史性的時刻,今天是2025年4月,過去兩年多,那個時刻目前回想還是對本人造成了沖擊,一個完全有自主分析能力的生…

【軟件測試】自動化測試框架Pytest + Selenium的使用

Pytest Selenium 是一種常見的自動化測試框架組合,用于編寫和執行 Web 應用程序的自動化測試。Pytest 是一個強大的 Python 測試框架,而 Selenium 是一個用于瀏覽器自動化的工具,二者結合使用可以高效地進行 Web 應用的功能測試、UI 測試等。…

煤礦濕噴砂漿攪拌機組創新設計與關鍵技術研究

引言&#xff1a;濕噴工藝在煤礦支護中的革命性意義 在深部煤礦巷道支護領域&#xff0c;濕噴混凝土技術以其回彈率低&#xff08;<15%&#xff09;、粉塵濃度小&#xff08;<10mg/m&#xff09;的顯著優勢&#xff0c;逐步取代傳統干噴工藝。作為濕噴工藝的核心設備&am…

如何處理ONLYOFFICE文檔服務器與Java Web應用間的安全認證和授權

如何處理ONLYOFFICE文檔服務器與Java Web應用間的安全認證和授權&#xff1f; 處理 ONLYOFFICE 文檔服務器與 Java Web 應用之間的安全認證和授權&#xff0c;通常涉及以下幾個關鍵步驟和技術&#xff1a; 1. JWT (JSON Web Token) 認證 啟用 JWT&#xff1a; ONLYOFFICE 文檔…