中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Select語句在MySQL中如何執行

發布時間:2020-11-07 15:52:44 來源:億速云 閱讀:129 作者:Leah 欄目:開發技術

Select語句在MySQL中如何執行?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

select的執行過程

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

Select語句在MySQL中如何執行

   首先,我們可以看到,整個select語句包含三個模塊,其中客戶端和MySQL兩個部分,MySQL又包含server端和存儲引擎側,server端包含連接器、查詢緩存、分析器、優化器,執行器等多個部分,存儲引擎側同樣包含innodb、Myisam,memory等多種存儲引擎。

每個模塊的作用如下:

連接器:

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

注意,如果此時我們更改了該賬號的權限,并不會對已經存在的連接產生影響,而只對新加入的連接產生影響。

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

查詢緩存:

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

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

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

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

分析器:

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

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

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

優化器:

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

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

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

這兩條SQL是等價的,因為優化器會將下面的改造成上面的樣子,從而應用聯合索引進行搜索查詢。

執行器:

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

這里需要注意一點:執行器調用一次,在引擎內部則掃描了多行,因此存儲引擎掃描行數跟rows_examined并不是完全相同的。

Q && A

Q1:為什么對權限的檢查不在優化器之前做?

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

Q2:MySQL權限到底在哪里驗證?

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诏安县| 肇源县| 福泉市| 枣强县| 郎溪县| 南靖县| 宁乡县| 黄浦区| 宁城县| 贡觉县| 宾阳县| 图片| 成都市| 灵石县| 海原县| 化德县| 仪陇县| 雷山县| 班玛县| 江山市| 揭西县| 长白| 朝阳区| 内丘县| 宁都县| 太和县| 喀喇沁旗| 浪卡子县| 怀仁县| 常熟市| 岢岚县| 阿图什市| 龙海市| 泽普县| 温泉县| 孟连| 休宁县| 扎囊县| 镇平县| 银川市| 澄迈县|