日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中,一条select语句是如何执行的?

發布時間:2024/1/23 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中,一条select语句是如何执行的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接下來通過語句弄明白整個Select語句的內部運行狀態:

連接器:

Mysql>mysql -uroot -p

你首先連接到這個數據庫上;鏈接器負責跟客戶端建立連接,獲取權限,維持和管理連接

????? ●如果密碼不對,你會收到“access denied for user”,然后客戶端程序執行結束

????? ●如果密碼認證通過,連接器會從權限表里查出你的權限;之后你所有的操作都依賴于此時得到的權限

連接完成后,如果你沒有后續的動作,這個連接就處于空閑狀態,sleep表明其處于空閑狀態

客戶端如果太久沒動靜,鏈接器會自動斷開,默認時間8小時;wait_timeout參數控制

如果,連接斷開,客戶端再次發送請求后,會收到一個錯誤:“lost connection to mysql server during query”;這時候,你需要重新連接,然后再執行請求;

查詢緩存:

一個select語句,會先到查詢緩存中看看,若是以前執行過,直接將查詢結果返回給客戶端,若是查詢緩存沒有命中,就需要執行后面的計劃

?

分析器

如果沒有命中查詢緩存,就要開始分析器了;

mysql> select sql_cache * from T where ID=10;

詞法分析:比如,T識別為表,select識別為查詢,ID識別為字段

語句分析:語法不對,會報錯(5.5.5與8.0語法有些許不同)

優化器

經過分析器,mysql知道你要干什么了,在開始執行前,還要經過優化器的處理

優化器:在表里有多個索引的時候,決定使用哪個索引;在一個表里有多表關聯時,決定各表的連接順序;

很多時候,兩種執行方法的邏輯結果是一樣的,但是執行效率會有不同,而優化器就是決定選擇哪個方案;

執行器

mysql> select sql_cache * from T where ID=10;

Mysql通過分析器知道了你要做什么,通過優化器知道了該怎么做,于是進行了執行器階段;

開始執行的時候,要先判斷一下你對這個表T有沒有查詢的權限,如果沒有,就會返回沒有權限的錯誤:

“select command denied to user “”,for table T ”

如果有權限,就打開表繼續執行。打開表的時候,執行器就會根據表的引擎定義,去使用這個引擎提供的接口;

? ? ●調用innodb引擎接口取這個表的第一行,遍歷所有的判斷字段,如果滿足,就將查詢結果存在結果集

? ? ? 你可以在rows_examined的字段,表示這個語句執行過程中掃描了多少行,這個值是累加的;

…………………………………………………………………………………………………………………………………………

內容來自于林曉斌老師《mysql實戰45講》

總結

以上是生活随笔為你收集整理的mysql中,一条select语句是如何执行的?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。