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

MySQL Select語(yǔ)句是如何執(zhí)行的

 更新時(shí)間:2020年11月07日 09:26:38   作者:AsiaYe  
這篇文章主要介紹了MySQL Select語(yǔ)句是如何執(zhí)行的,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

MySQL Select語(yǔ)句是怎么執(zhí)行的?

   最近在極客時(shí)間看丁奇大佬的《MySQL45講》,真心覺(jué)得講的不錯(cuò),把其中獲得的一些MySQL方向的經(jīng)驗(yàn)整理整理分享給大家,有興趣同學(xué)可以購(gòu)買相關(guān)課程進(jìn)行學(xué)習(xí)。

   今天分享的內(nèi)容是select和update的執(zhí)行流程。

select的執(zhí)行過(guò)程

話不多說(shuō),來(lái)個(gè)神圖鎮(zhèn)樓(自己畫的)。

   首先,我們可以看到,整個(gè)select語(yǔ)句包含三個(gè)模塊,其中客戶端和MySQL兩個(gè)部分,MySQL又包含server端和存儲(chǔ)引擎?zhèn)?,server端包含連接器、查詢緩存、分析器、優(yōu)化器,執(zhí)行器等多個(gè)部分,存儲(chǔ)引擎?zhèn)韧瑯影琲nnodb、Myisam,memory等多種存儲(chǔ)引擎。

每個(gè)模塊的作用如下:

連接器:

   連接器的任務(wù)是跟客戶端建立連接,查詢權(quán)限,維持和管理連接等等。當(dāng)我們使用命令行登錄時(shí),如果密碼或者賬號(hào)錯(cuò)誤,那么連接器會(huì)返回給我們Access Deny的報(bào)錯(cuò),利用正確的賬號(hào)密碼登錄到MySQL之后,連接器會(huì)查詢當(dāng)前賬號(hào)的登錄權(quán)限,之后的所有操作,都是依賴這個(gè)權(quán)限進(jìn)行的。

注意,如果此時(shí)我們更改了該賬號(hào)的權(quán)限,并不會(huì)對(duì)已經(jīng)存在的連接產(chǎn)生影響,而只對(duì)新加入的連接產(chǎn)生影響。

   如果客戶端連接進(jìn)入MySQL后,一直沒(méi)有進(jìn)行任何操作,那么連接器將會(huì)在wait_timeout參數(shù)設(shè)置的時(shí)間后,將該連接斷開(kāi)。建議在程序中使用長(zhǎng)連接,這樣可以減小和客戶端和MySQL建立連接的帶來(lái)的性能損耗。

查詢緩存:

當(dāng)客戶端輸入一個(gè)SQL之后,如果命中查詢緩存,那么MySQL將會(huì)直接返回結(jié)果,而不進(jìn)行下面的一系列分析操作,如果沒(méi)有命中,則開(kāi)始進(jìn)入分析器---優(yōu)化器---執(zhí)行器這個(gè)流程。關(guān)于查詢緩存,還有2點(diǎn)需要注意:

a、MySQL8.0中開(kāi)始棄用查詢緩存,因?yàn)椴樵兙彺娴拿新室话爿^低,弊大于利。

b、在高并發(fā)場(chǎng)景中,建議將查詢緩存關(guān)閉,關(guān)閉時(shí)使用query_cache_type=off或者query_cache_size=0。

c、如果非要使用這個(gè)功能,可以將參數(shù)query_cache_type設(shè)置成DEMAND,這樣,就可以使用select sql_cache  * from table這種方式強(qiáng)制使用查詢緩存的功能了。

分析器:

如果我們的查詢沒(méi)有真正命中查詢緩存,那么就要進(jìn)入分析器這個(gè)環(huán)節(jié)了,分析器的主要功能是詞法分析和語(yǔ)法分析,其中:

詞法分析指的是根據(jù)SQL分析出來(lái)select、update、alter、列名、表名、庫(kù)名等;

語(yǔ)法分析是指需要分析你寫的SQL是否滿足MySQL的語(yǔ)法。如果不滿足,則會(huì)給出you have an error xxx的提示。

優(yōu)化器:

   優(yōu)化器的作用是選出SQL執(zhí)行的最佳路徑,例如在多表join的時(shí)候,優(yōu)化器會(huì)選擇最高效的方案來(lái)執(zhí)行連接查詢。這里可以給出一個(gè)例子,例如我們建立了(a,b)的聯(lián)合索引,

select * from table where a=1 and b=1;

select * from table where b=1 and a=1;

這兩條SQL是等價(jià)的,因?yàn)閮?yōu)化器會(huì)將下面的改造成上面的樣子,從而應(yīng)用聯(lián)合索引進(jìn)行搜索查詢。

執(zhí)行器:

  SQL經(jīng)過(guò)優(yōu)化器之后,就會(huì)進(jìn)入執(zhí)行器,執(zhí)行SQL前,需要校驗(yàn)表的權(quán)限,如果有權(quán)限,會(huì)根據(jù)表的存儲(chǔ)引擎定義,去使用這個(gè)存儲(chǔ)引擎提供的接口,最終將數(shù)據(jù)返回給客戶端,并開(kāi)始等待新的連接。

這里需要注意一點(diǎn):執(zhí)行器調(diào)用一次,在引擎內(nèi)部則掃描了多行,因此存儲(chǔ)引擎掃描行數(shù)跟rows_examined并不是完全相同的。

Q && A

Q1:為什么對(duì)權(quán)限的檢查不在優(yōu)化器之前做?

A1:有些時(shí)候,SQL語(yǔ)句要操作的表不只是SQL字面上那些。比如如果有個(gè)觸發(fā)器,得在執(zhí)行器階段(過(guò)程中)才能確定。優(yōu)化器階段前是無(wú)能為力的

Q2:MySQL權(quán)限到底在哪里驗(yàn)證?

A2:賬號(hào)的登錄權(quán)限在連接器模塊驗(yàn)證;表的操作權(quán)限分為兩種情況,如果命中查詢緩存,會(huì)在查詢緩存放回結(jié)果的時(shí)候驗(yàn)證,在優(yōu)化器之前,如果沒(méi)有命中索引,則權(quán)限驗(yàn)證在執(zhí)行器模塊驗(yàn)證。

以上就是MySQL Select語(yǔ)句是如何執(zhí)行的的詳細(xì)內(nèi)容,更多關(guān)于MySQL Select語(yǔ)句的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySql學(xué)習(xí)心得之存儲(chǔ)過(guò)程

    MySql學(xué)習(xí)心得之存儲(chǔ)過(guò)程

    之前總是在MSSQL上寫存儲(chǔ)過(guò)程,沒(méi)有在MYSQL上寫過(guò),也基本沒(méi)有用過(guò),今天需要用到MYSQL,研究了下,把項(xiàng)目的需要的存儲(chǔ)過(guò)程寫了一部分,寫一下工作總結(jié)。這里沒(méi)有給出數(shù)據(jù)庫(kù)結(jié)構(gòu),不討論SQL語(yǔ)句的細(xì)節(jié),主要探討存儲(chǔ)過(guò)程語(yǔ)法,適合有基礎(chǔ)的人。
    2014-06-06
  • MySQL?5.7壓縮包安裝圖文教程(超詳細(xì))

    MySQL?5.7壓縮包安裝圖文教程(超詳細(xì))

    這篇文章主要介紹了MySQL?5.7壓縮包安裝圖文教程(超詳細(xì)),本文通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),感興趣的朋友跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Mysql的復(fù)合索引如何生效

    Mysql的復(fù)合索引如何生效

    本文主要介紹了Mysql的復(fù)合索引如何生效,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 安裝Mysql時(shí)可能會(huì)遇到的一些疑難雜癥

    安裝Mysql時(shí)可能會(huì)遇到的一些疑難雜癥

    這篇文章主要給大家介紹了關(guān)于安裝Mysql時(shí)可能會(huì)遇到的一些疑難雜癥,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySQL數(shù)據(jù)庫(kù)優(yōu)化經(jīng)驗(yàn)詳談(服務(wù)器普通配置)

    MySQL數(shù)據(jù)庫(kù)優(yōu)化經(jīng)驗(yàn)詳談(服務(wù)器普通配置)

    同時(shí)在線訪問(wèn)量繼續(xù)增大 對(duì)于1G內(nèi)存的服務(wù)器明顯感覺(jué)到吃力嚴(yán)重時(shí)甚至每天都會(huì)死機(jī) 或者時(shí)不時(shí)的服務(wù)器卡一下 這個(gè)問(wèn)題曾經(jīng)困擾了我半個(gè)多月MySQL使用是很具伸縮性的算法,因此你通常能用很少的內(nèi)存運(yùn)行或給MySQL更多的被存以得到更好的性能。
    2011-03-03
  • 正確使用MySQL INSERT INTO語(yǔ)句

    正確使用MySQL INSERT INTO語(yǔ)句

    MySQL數(shù)據(jù)庫(kù)是一種小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL數(shù)據(jù)庫(kù)的優(yōu)化是MySQL數(shù)據(jù)庫(kù)操作過(guò)程中非常重要的工作,MySQL數(shù)據(jù)庫(kù)的優(yōu)化能夠?qū)崿F(xiàn)MySQL數(shù)據(jù)庫(kù)操作的簡(jiǎn)便。
    2015-08-08
  • MySQL基本運(yùn)維命令詳解

    MySQL基本運(yùn)維命令詳解

    這篇文章主要介紹了MySQL基本運(yùn)維命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 阿里云服務(wù)器手動(dòng)實(shí)現(xiàn)mysql雙機(jī)熱備的兩種方式

    阿里云服務(wù)器手動(dòng)實(shí)現(xiàn)mysql雙機(jī)熱備的兩種方式

    阿里云服務(wù)器由于不支持keepalive虛擬ip,導(dǎo)致無(wú)法通過(guò)keepalive來(lái)實(shí)現(xiàn)mysql的雙機(jī)熱備。我們這里要實(shí)現(xiàn)阿里云的雙機(jī)熱備有兩種方式。感興趣的朋友跟隨小編一起看看吧
    2019-10-10
  • 簡(jiǎn)述MySQL與Oracle的區(qū)別

    簡(jiǎn)述MySQL與Oracle的區(qū)別

    Oracle是大型數(shù)據(jù)庫(kù)而Mysql是中小型數(shù)據(jù)庫(kù),Oracle市場(chǎng)占有率達(dá)40%,Mysql只有20%左右,同時(shí)Mysql是開(kāi)源的而Oracle價(jià)格非常高
    2017-06-06
  • MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié)

    MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié)

    這篇文章主要介紹了MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié),本文總結(jié)了大多數(shù)常用的MySQL數(shù)學(xué)函數(shù),并給出了使用實(shí)例,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

石台县| 临潭县| 广宗县| 莱州市| 长岭县| 阜平县| 伽师县| 盘山县| 德昌县| 尚志市| 临泽县| 龙岩市| 诸城市| 临夏市| 绥棱县| 安庆市| 长阳| 绍兴县| 兰坪| 曲沃县| 全州县| 浑源县| 平邑县| 乌拉特前旗| 梓潼县| 勐海县| 防城港市| 保德县| 涞水县| 景泰县| 什邡市| 深水埗区| 囊谦县| 河源市| 临沂市| 乌审旗| 美姑县| 永定县| 左贡县| 蛟河市| 利津县|