欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

select的執(zhí)行過程

話不多說,來個神圖鎮(zhèn)樓(自己畫的)。

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

每個模塊的作用如下:

連接器:

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

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

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

查詢緩存:

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

a、MySQL8.0中開始棄用查詢緩存,因為查詢緩存的命中率一般較低,弊大于利。

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

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

分析器:

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

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

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

優(yōu)化器:

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

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

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

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

執(zhí)行器:

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

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

Q && A

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

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

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

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

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

相關(guān)文章

  • MySQL主從數(shù)據(jù)庫搭建方法詳解

    MySQL主從數(shù)據(jù)庫搭建方法詳解

    這篇文章主要介紹了MySQL主從數(shù)據(jù)庫搭建方法,較為詳細的分析了MySQL主從數(shù)據(jù)庫搭建的原理、步驟與具體操作技巧,需要的朋友可以參考下
    2017-09-09
  • Spring中的InitializingBean和SmartInitializingSingleton的區(qū)別詳解

    Spring中的InitializingBean和SmartInitializingSingleton的區(qū)別詳解

    這篇文章主要介紹了Spring中的InitializingBean和SmartInitializingSingleton的區(qū)別詳解,InitializingBean只有一個接口方法afterPropertiesSet(),在BeanFactory初始化完這個bean,并且把bean的參數(shù)都注入成功后調(diào)用一次afterPropertiesSet()方法,需要的朋友可以參考下
    2024-01-01
  • 淺談MySQL聚簇索引

    淺談MySQL聚簇索引

    數(shù)據(jù)庫的索引從不同的角度可以劃分成不同的類型,聚簇索引便是其中一種。聚簇索引并不是一種單獨的索引類型,而是一種數(shù)據(jù)的存儲方式。本文詳細介紹了MySQL的聚簇索引,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Sql group by 分組取時間最新的一條數(shù)據(jù)(示例代碼)

    Sql group by 分組取時間最新的一條數(shù)據(jù)(示例代碼)

    這篇文章主要介紹了Sql group by 分組取時間最新的一條數(shù)據(jù),本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • MySQL 修改密碼實例詳解

    MySQL 修改密碼實例詳解

    這篇文章主要介紹了MySQL 修改密碼實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Mysql中的sql優(yōu)化實踐詳解

    Mysql中的sql優(yōu)化實踐詳解

    這篇文章主要介紹了Mysql中的sql優(yōu)化實踐詳解,SQL優(yōu)化是指通過改進SQL語句的編寫和查詢計劃的設(shè)計來提高數(shù)據(jù)庫查詢性能的過程,在優(yōu)化SQL時,可以采取一些措施來提升查詢性能,需要的朋友可以參考下
    2023-09-09
  • Can’t open file:''[Table]mytable.MYI''

    Can’t open file:''[Table]mytable.MYI''

    也許很多人遇到過類似Can’t open file: ‘[Table]mytable.MYI’ 這樣的錯誤信息,卻不知道怎么解決他,下面我們做個介紹,
    2011-01-01
  • Mysql并發(fā)常見的死鎖及解決方法

    Mysql并發(fā)常見的死鎖及解決方法

    死鎖是在并發(fā)執(zhí)行的過程中,兩個或多個事務(wù)相互等待對方釋放資源的情況,本文主要介紹了Mysql并發(fā)常見的死鎖及解決方法,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法

    mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法

    這篇文章給大家介紹mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法,本文分步驟純文字說明,介紹的非常詳細,具有參考價值,在此分享供大家參考
    2015-10-10
  • mysql limit 分頁的用法及注意要點

    mysql limit 分頁的用法及注意要點

    limit在mysql語句中使用的頻率非常高,一般分頁查詢都會使用到limit語句,本文章向碼農(nóng)們介紹mysql limit 分頁的用法與注意事項,需要的朋友可以參考下
    2016-12-12

最新評論