最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

論一條select語句在MySQL是怎樣執(zhí)行的

 更新時(shí)間:2021年08月25日 17:21:56   作者:咔咔-  
本文將建立一套建立一套MySQL的知識(shí)框架,通過討論select語句在MySQL是怎樣執(zhí)行的來展開內(nèi)容,感興趣的小伙伴一起來看下文吧

一、從宏觀的角度分析MySQL

首先看一張經(jīng)典圖片(MySQL邏輯架構(gòu)圖

上圖的客戶端可以直接理解為PHP、Java等。接下來,你會(huì)看到連接、線程處理。這一部分并不是MySQL所特有的,而且大多數(shù)客戶端、服務(wù)器都具有類似的結(jié)構(gòu)。

因此,一般而言,MySQL可以分為兩層:Server層和存儲(chǔ)引擎層。

Server層主要包括連接層、查詢緩存、分析器、優(yōu)化器、執(zhí)行器等重要模塊組成,這一層還包含了MySQL核心Api部分,比如常用的格式化時(shí)間、加密等。

存儲(chǔ)引擎大家都很熟悉,因?yàn)樵诿嬖囍胁恢挂淮蔚膯栠^大家Innodb、Myisam存儲(chǔ)引擎的不同。

所以想過沒有,MySQL為什么會(huì)有這么多的存儲(chǔ)引擎呢?

一切技術(shù)起源于當(dāng)下問題,同樣在MySQL中也不例外。

MySQL在存儲(chǔ)引擎這一方面的架構(gòu)是插件式的,即可以隨意切換不固定,而且MySQL5.5版本存儲(chǔ)引擎已經(jīng)默認(rèn)為Innodb。

二、一條SQL執(zhí)行要經(jīng)過多少困難?

MySQL詳細(xì)架構(gòu)圖

圖中還有一個(gè)熟悉的陌生人查詢緩存模塊,該模塊在MySQL8.0中已不存在。

首先,我們將大致了解當(dāng)我們執(zhí)行一條SQL語句時(shí),如何在這個(gè)架構(gòu)圖中運(yùn)行。

2-1 連接器

mysql -u root -p連接數(shù)據(jù)庫命令,在執(zhí)行之后,你將需要輸入密碼。當(dāng)完成經(jīng)典的TCP握手之后,連接器就開始發(fā)揮作用了。

如果碼錯(cuò)誤時(shí),則返回Access denied for user ‘root‘@‘localhost‘ (using password: YES,錯(cuò)誤編碼1045。

如果連接信息均正確,則此時(shí)將根據(jù)你輸入的用戶訪問權(quán)限表來獲取該用戶的權(quán)限,此處必須清楚,當(dāng)你登錄成功后,即使其他人修改了你的權(quán)限,在這個(gè)連接未斷開之前你的權(quán)限是不會(huì)發(fā)生改變的。

當(dāng)你連接完成之后,如果你一直不做任何事情,執(zhí)行show processlist將會(huì)看到一個(gè)sleep,表示空連接。

那么你知道在MySQL中,如果連接成功后沒有進(jìn)行任何操作,多久會(huì)被自動(dòng)中斷?

可以執(zhí)行show variables like 'wait_timeout';用于查看時(shí)間。

在MySQL中如果沒有特別說明,那么所有的時(shí)間都是以秒為單位的,根據(jù)時(shí)間轉(zhuǎn)換可以得知空連接持續(xù)8小時(shí)。

2-2 查詢緩存

你需要注意的是,MySQL8.0已經(jīng)被取消了,這個(gè)問題不止說了一次了,特別是那些正在使用MySQL8.0以下版本的小伙伴要注意哈!當(dāng)你切換到8.0時(shí)候,遇到這個(gè)問題不知道怎么解決。

MySQL8.0為何取消查詢緩存模塊

這個(gè)模塊的設(shè)計(jì),把查詢語句作為key ,將結(jié)果作為value 進(jìn)行緩存,一旦這個(gè)表有更新,之前所有的緩存都會(huì)被清除掉。這就像你辛辛苦苦寫的代碼提交之后被別人覆蓋一樣難受。

MySQL8.0以下的版本提供了一個(gè)參數(shù)query_cache_type = enmand來控制是否要使用查詢緩存,在設(shè)置完成后,默認(rèn)的select語句將不會(huì)被緩存。

如果確實(shí)可以使用部分場(chǎng)景,那么你可以將sql_cache添加到select關(guān)鍵字之后。

如果一條select語句之前被緩存過,那么結(jié)果集在這里就會(huì)直接返回,而沒有緩存過的select語句就比較辛苦了,還要繼續(xù)自己的漫漫長(zhǎng)路。

2-3 分析器

MySQL8.0之前,它會(huì)在進(jìn)入分析器之前判斷是否緩存,在MySQL8.0之后,連接器驗(yàn)證成功后就直接進(jìn)入分析器。

分析器,根據(jù)字面意思來理解就是分析要執(zhí)行的SQL語句是什么,要做什么。

比如執(zhí)行select * from user where id = 1

MySQL首先根據(jù)select判斷這是一個(gè)查詢語句,然后將user識(shí)別為表名,id識(shí)別為字段名,這個(gè)過程被稱為詞法分析。

下一步,需要知道該SQL的語法是否正確,進(jìn)行語法分析,如果語法不對(duì)你就會(huì)看到Y(jié)ou have an error in your SQL syntax錯(cuò)誤。通常,將在use near中找到該錯(cuò)誤。

2-4 優(yōu)化器

到了這一步,MySQL知道你要做什么,但是要選擇最佳執(zhí)行方案。

優(yōu)化器都優(yōu)化些什么?

舉例來說:多個(gè)索引時(shí)選擇那個(gè)索引、多表關(guān)聯(lián)時(shí)連接順序。

現(xiàn)在你是否想知道,優(yōu)化器將優(yōu)化多表關(guān)聯(lián)的連接順序,那在寫SQL語句時(shí)是否就不必考慮連接順序呢?

當(dāng)然不是,能讓MySQL少做事情就少做,還是一個(gè)準(zhǔn)則用小表驅(qū)動(dòng)大表。

2-5 執(zhí)行器

通過要做什么、怎么做后這條SQL語句才會(huì)真正的被執(zhí)行,先進(jìn)行權(quán)限驗(yàn)證,若沒有權(quán)限則直接返回權(quán)限錯(cuò)誤,否則根據(jù)表定義的存儲(chǔ)引擎,去使用對(duì)應(yīng)引擎提供的接口。

執(zhí)行流程圖

上圖包含了正文的所有知識(shí)點(diǎn),也是整個(gè)MySQL的大體執(zhí)行流程圖。

到此這篇關(guān)于論一條select語句在MySQL是怎樣執(zhí)行的的文章就介紹到這了,更多相關(guān)select執(zhí)行MySQL語句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql死鎖怎么排查的方法實(shí)現(xiàn)

    MySql死鎖怎么排查的方法實(shí)現(xiàn)

    本文主要介紹了MySql死鎖怎么排查的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • mysql?字段括號(hào)拼接的實(shí)現(xiàn)示例

    mysql?字段括號(hào)拼接的實(shí)現(xiàn)示例

    在使用MySQL進(jìn)行數(shù)據(jù)查詢時(shí),有時(shí)候需要對(duì)字段進(jìn)行拼接,并用括號(hào)包圍起來,本文主要介紹了mysql?字段括號(hào)拼接的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié)(推薦)

    MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié)(推薦)

    MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié),碰到的朋友可以參考,下面整理一些比較全,希望對(duì)大家有所幫助。
    2011-01-01
  • Mysql如何在線添加索引

    Mysql如何在線添加索引

    這篇文章主要介紹了Mysql如何在線添加索引問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySQL binlog_ignore_db 參數(shù)的具體使用

    MySQL binlog_ignore_db 參數(shù)的具體使用

    這篇文章主要介紹了MySQL binlog_ignore_db 參數(shù)的具體作用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • mysql間隙鎖加鎖11個(gè)規(guī)則(案例分析)

    mysql間隙鎖加鎖11個(gè)規(guī)則(案例分析)

    這篇文章主要介紹了mysql間隙鎖加鎖11個(gè)規(guī)則?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySQL8.0.21安裝步驟及出現(xiàn)問題解決方案

    MySQL8.0.21安裝步驟及出現(xiàn)問題解決方案

    這篇文章主要介紹了MySQL8.0.21安裝步驟及出現(xiàn)問題解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 關(guān)于Mysql的InnoDB鎖概述

    關(guān)于Mysql的InnoDB鎖概述

    這篇文章主要介紹了關(guān)于Mysql的InnoDB鎖概述,對(duì)于更新操作(UPDATE、INSERT、DELETE),InnoDB會(huì)自動(dòng)給涉及到的數(shù)據(jù)集加排他鎖,需要的朋友可以參考下
    2023-05-05
  • MySQL數(shù)據(jù)表基本操作實(shí)例詳解

    MySQL數(shù)據(jù)表基本操作實(shí)例詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)表基本操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了MySQL針對(duì)數(shù)據(jù)表的基本創(chuàng)建、表結(jié)構(gòu)查看、修改、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • mysql SQL語句積累

    mysql SQL語句積累

    mysql SQL語句積累,學(xué)習(xí)mysql的朋友可以參考下。
    2011-09-09

最新評(píng)論

墨江| 文安县| 新乐市| 章丘市| 西贡区| 吉水县| 丹东市| 吉木萨尔县| 铁力市| 醴陵市| 胶州市| 潮州市| 伊宁县| 乡宁县| 万安县| 遵化市| 来凤县| 福州市| 铁岭市| 双辽市| 巩留县| 商河县| 嘉荫县| 肃南| 柳林县| 徐水县| 濉溪县| 秀山| 乐昌市| 西平县| 巴彦淖尔市| 海林市| 凤冈县| 太湖县| 措勤县| 南岸区| 黄山市| 金阳县| 浪卡子县| 武义县| 潮安县|