国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL執(zhí)行流程_執(zhí)行一條select語句,期間發(fā)生了什么

這篇具有很好參考價值的文章主要介紹了MySQL執(zhí)行流程_執(zhí)行一條select語句,期間發(fā)生了什么。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


MySQL執(zhí)行流程_執(zhí)行一條select語句,期間發(fā)生了什么,mysql,mysql,android,adb

執(zhí)行一條select語句,期間發(fā)生了什么

MySQL執(zhí)行流程

MySQL執(zhí)行流程_執(zhí)行一條select語句,期間發(fā)生了什么,mysql,mysql,android,adb

  • server層負責建立連接、分析和執(zhí)行SQL

    • 包括連接器、查詢緩存、解析器、預處理器、優(yōu)化器、執(zhí)行器等,所有內置函數(shù)和所有跨存儲引擎的功能在該層實現(xiàn)
  • 存儲引擎層負責數(shù)據的存儲和提取

    • 索引數(shù)據結構就是由存儲引擎層實現(xiàn),不同的存儲引擎支持的索引類型也不相同

      • InnoDB支持索引類型是B+樹,默認使用

      • 在數(shù)據表中創(chuàng)建的主鍵索引和二級索引默認使用B+樹索引

第一步:連接器
連接mysql服務器
linux: mysql -h ip地址 -u 用戶名 -p 密碼

mysql基于TCP協(xié)議進行傳輸,需要三次握手

與客戶端TCP三次握手建立連接 => 驗證用戶名、密碼 => 連接器獲取該用戶權限(若管理員中途修改權限也不起效,需要新建連接才會使用新的權限設置)

如何查看 MySQL 服務被多少個客戶端連接了?

show processlist

若用戶的Command列狀態(tài)為Sleep則說明這是一個空閑的連接

空閑連接會一直占用著嗎?

不會,mysql定義了空閑連接的最大空閑時長,由wait_timeout參數(shù)控制,超過這個時間,連接器自動將它斷開
    1. 查看最大空閑時長 
        show variables like 'wait_timeout'
    2. 手動斷開空閑連接
        kill connection+id

一個處于空閑狀態(tài)的連接被服務端斷開后,客戶端不會馬上知道,等客戶端發(fā)起下一個請求才會收到報錯

MySQL的連接數(shù)有限制嗎?

有,由max_connections控制

MySQL的長連接 vs. 短連接

短連接:
    連接mysql服務
    執(zhí)行mysql
    斷開
長連接:
    連接mysql
    執(zhí)行mysql
    執(zhí)行
    執(zhí)行
    執(zhí)行
    ....
    斷開
使用長連接可以減少建立連接和斷開連接的過程(推薦)
缺點:占用內存增多

怎么結局長連接占用內存的問題?

1. 定期斷開長連接
2. 客戶端主動重置連接
第二步:查詢緩存

連接器完成工作后,客戶端可以向mysql服務發(fā)送sql語句,mysql服務收到sql語句后,就會解析處sql語句的第一個字段,查看是什么類型的語句

select語句 => 在查詢緩存里查找緩存數(shù)據(key-value形式存儲,key:sql語句,value:查詢結果) => 若命中,則直接返回value給客戶端;若未命中,繼續(xù)執(zhí)行,執(zhí)行完后查詢結果存入查詢緩存

缺點:對于更新頻繁的表,只要一個表有更新操作,那么這個表的查詢緩存就會被清空

mysql8.0開始刪除查詢緩存

第三步:解析SQL

解析器完成

  1. 詞法分析
關鍵字 非關鍵字 關鍵字 非關鍵字
select username from userinfo
  1. 語法分析

根據語法規(guī)則,判斷sql語句是否正確,若正確則構建SQL語法樹,否則報錯。

注意: 表不存在或字段不存在,不是解析器里做的(預處理器負責),解析器只負責檢查語法和構建語法樹

第四步:執(zhí)行SQL

預處理階段 => 優(yōu)化階段 => 執(zhí)行階段

  1. 預處理器
  • 檢查SQL查詢語句中的表或字段是否存在(不存在則報錯)
  • 將select * 中的 * 符號擴展為表上所有列
  1. 優(yōu)化器

為sql查詢語句制定一個執(zhí)行計劃

優(yōu)化器主要負責將sql查詢語句的執(zhí)行方案確定下來,表中有多個索引時,選擇使用哪個索引

查看優(yōu)化器使用了哪個索引

explain sql查詢語句 (輸出這條sql語句的執(zhí)行計劃)

查看執(zhí)行計劃的key

PRIMARY 主鍵索引

NULL 沒有使用索引,全表掃描

例:覆蓋索引

直接在二級索引就能查找到結果(因為二級索引的 B+ 樹的葉子節(jié)點的數(shù)據存儲的是主鍵值,就沒必要在主鍵索引查找了,因為查詢主鍵索引的 B+ 樹的成本會比查詢二級索引的 B+ 的成本大)

select id from product where id > 1 and name like 'i%'
extra為Using index,表明使用了覆蓋索引優(yōu)化
  1. 執(zhí)行器

執(zhí)行器與存儲引擎進行交互,從存儲引擎讀取記錄,返回給客戶端文章來源地址http://www.zghlxwxcb.cn/news/detail-759281.html

  • 主鍵索引查詢(存儲引擎定位符合條件的第一條記錄)
  • 全表掃描(存儲引擎讀取表中第一條記錄)
  • 索引下推

到了這里,關于MySQL執(zhí)行流程_執(zhí)行一條select語句,期間發(fā)生了什么的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MySQL面試題:一條SQL語句在MySQL中執(zhí)行過程全解析

    MySQL面試題:一條SQL語句在MySQL中執(zhí)行過程全解析

    介紹一下下圖涉及的一些組件的基本作用幫助大家理解這幅圖。 連接/線程處理(連接器): 身份認證和權限相關(如連接處理、授權認證、安全等等)。 查詢緩存: 執(zhí)行查詢語句的時候,會先查詢緩存(MySQL 8.0 版本后移除)。 解析器: 沒有命中緩存的話,SQL 語句就會經過解析

    2024年02月03日
    瀏覽(52)
  • MySQL Select 語句執(zhí)行順序

    一條 SQL 查詢語句結構如下: 但真正的執(zhí)行步驟如下,執(zhí)行時,每個步驟都會產生一個虛擬表,該虛擬表被用作下一個步驟的輸入: 1. FROM 在這一步,無論后面跟那種聯(lián)接運算(LEFT JOIN、RIGHT JOIN等),都首先執(zhí)行交叉聯(lián)接(CROSS JOIN),計算笛卡爾積,生成虛擬表 VT-1 2. ON 根

    2024年02月05日
    瀏覽(31)
  • 【MySQL系列】- SELECT語句執(zhí)行順序

    【MySQL系列】- SELECT語句執(zhí)行順序

    2.1 執(zhí)行FROM操作 這一步需要做的是對FROM子句前后的兩張表進行笛卡爾積操作,也稱作為交叉連接,生成虛擬表VT1。如果FROM子句前的表包含a行數(shù)據,F(xiàn)ROM子句后的表中包含b行數(shù)據,那么虛擬表VT1將包含a*b行數(shù)據。 2.2 應用ON過濾器 SELECT查詢共有3個過濾流程,分別是ON、WHERE、

    2024年02月08日
    瀏覽(44)
  • Mysql的學習與鞏固:一條SQL查詢語句是如何執(zhí)行的?

    Mysql的學習與鞏固:一條SQL查詢語句是如何執(zhí)行的?

    我們經常說,看一個事兒千萬不要直接陷入細節(jié)里,你應該先鳥瞰其全貌,這樣能夠幫助你從高維度理解問題。同樣,對于MySQL的學習也是這樣。平時我們使用數(shù)據庫,看到的通常都是一個整體。比如,你有個最簡單的表,表里只有一個ID字段,在執(zhí)行下面這個查詢語句時:

    2023年04月13日
    瀏覽(97)
  • MYSQL實戰(zhàn)45講筆記--基礎架構:一條SQL查詢語句是如何執(zhí)行的?

    MYSQL實戰(zhàn)45講筆記--基礎架構:一條SQL查詢語句是如何執(zhí)行的?

    MySQL 可以分為 Server 層和存儲引擎層兩部分。 Server 層 :連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器等,涵蓋 MySQL 的大多數(shù)核心服務功能,以及所有的內置函數(shù)(如日期、時間、數(shù)學和加密函數(shù)等),所有跨存儲引擎的功能都在這一層實現(xiàn),比如存儲過程、觸發(fā)器、視圖等

    2024年02月07日
    瀏覽(23)
  • MySQL中,SQL 查詢總是先執(zhí)行SELECT語句嗎?

    在使用 MySQL 進行查詢時,我們通常會使用 SELECT 語句,但是 SELECT 語句是否總是最先被執(zhí)行呢?這是一個非常有趣的問題,本文將對此進行探討。 在 MySQL 中,SQL 查詢通常包括以下幾個步驟: 語法解析 :MySQL 會對 SQL 查詢語句進行語法解析,檢查語句是否符合 SQL 語法規(guī)范。

    2023年04月09日
    瀏覽(21)
  • 從輸入URL到網頁顯示,期間發(fā)生了什么(詳解)

    從輸入URL到網頁顯示,期間發(fā)生了什么(詳解)

    Internet上的每一個網頁都具有一個唯一的名稱標識,通常稱之為 URL (Uniform Resource Locator, 統(tǒng)一資源定位器)。它是www的統(tǒng)一資源定位標志,簡單地說URL 就是web地址,俗稱“網址”。 URL格式 首先瀏覽器的第一步是對URL進行解析 ,從而 發(fā)送給Web服務器的請求信息。 假如說 沒有

    2023年04月08日
    瀏覽(20)
  • 鍵盤敲入 A 字母時,操作系統(tǒng)期間發(fā)生了什么?

    關于8.1 鍵盤敲入 A 字母時,操作系統(tǒng)期間發(fā)生了什么?的總結,前面都介紹了,但是在最后總結操作系統(tǒng)發(fā)生了什么的時候,我覺得有點不詳細,于是寫一寫自己的補充和理解,不一定正確。 鍵盤敲擊之后, 鍵盤控制器根據敲擊的鍵生成掃描碼,寫入寄存器 。 同時通過中

    2024年02月11日
    瀏覽(14)
  • 場景應用:鍵盤敲入字母a時,期間發(fā)生了什么?

    場景應用:鍵盤敲入字母a時,期間發(fā)生了什么?

    從下面?zhèn)€階段一層層分析: 面試官:當你鍵盤敲入字母a時,期間發(fā)生了什么? 外行:很高興有這次面試機會,再見! 面試官:… 面試官:當你鍵盤敲入字母a時,期間發(fā)生了什么? 小白:系統(tǒng)獲取輸入的值,應用程序捕獲對其進行處理,屏幕上顯示了搜狗輸入法a的候選項

    2024年02月09日
    瀏覽(52)
  • 【操作系統(tǒng)】鍵盤敲入字母時,操作系統(tǒng)期間發(fā)生了什么?

    【操作系統(tǒng)】鍵盤敲入字母時,操作系統(tǒng)期間發(fā)生了什么?

    參考資料: 鍵盤敲入 A 字母時,操作系統(tǒng)期間發(fā)生了什么? 【操作系統(tǒng)】淺談 Linux 中的中斷機制 鍵盤可以說是我們最常使用的輸入硬件設備了,但身為程序員的你,你知道「 鍵盤敲入字母時,操作系統(tǒng)期間發(fā)生了什么嗎 」? 那要想知道這個發(fā)生的過程,我們得先了解了解

    2024年02月16日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包