MySql之sql執行過程

2021-09-13 08:22:38 字數 1683 閱讀 5666

mysql是乙個關係型資料庫管理系統,由瑞典mysql ab 公司開發,目前屬於 oracle 旗下產品。mysql 是最流行的關係型資料庫管理系統之一,在 web 應用方面,mysql是最好的 rdbms (relational database management system,關聯式資料庫管理系統) 應用軟體。

編寫sql語句基本是程式開發中的日常,執行sql在mysql中都經歷了哪些過程呢?例如:select * from user where id=1
負責與客戶端建立連線、獲取許可權、位置和管理連線。
連線命令:

mysql -h$ip -p$port -u$user -p
環節:

1. tcp握手       

2. 認證你的身份

3. 獲取許可權

當連線建立完成後就開始執行select語句,執行邏輯就會來到第二步:查詢快取
mysql 在執行查詢時會先對查詢快取進行查詢,是否之前執行過此查詢,之前執行過的語句會以key-value形式,被直接快取在記憶體當中key為語句,value是查詢結果,查詢後2種結果:

1. 查詢快取命中:直接返回結果(效率很高)

2. 查詢快取未命中: 繼續直行後面的階段,執行完成後,執行結果會被存入查詢快取中

大多數情況下我會建議你不要使用查詢快取,為什麼呢?因為查詢快取往往利大於弊

查詢快取的失效非常頻繁,只要有對乙個表的更新,整個表上的查詢快取都會被清空,對於更新頻繁的表使用查詢快取命中率就會很低,對於更新比較少的靜態表則很適用。
按需使用:

將mysql引數 query_cache_type 設定為 demand 這樣sql語句都不會使用快取,對於需要使用查詢快取的查詢語句可以用sql_cache顯示指定。(mysql8.0 已經將查詢快取模組移除)
mysql> select sql_cache * from user where id=1

如果沒有命中查詢快取,就要開始真正執行語句了。
首先 mysql 需要 知道你要執行什麼,所以要對sql語句做解析

經過分析器之後,mysql就知道你需要做什麼,在執行之前還要經過優化器的處理。
mysql> select * from t1 join t2 using(id) where t1.c=10 and t2.d=20
兩種方法邏輯和結果相同,但是執行效率會有不同,優化器就是要決定使用哪一種方案。

到這裡mysql已經知道你想要做什麼了,優化器也幫你優化了知道該怎麼做了,那麼就開始執行語句吧。
有索引

在這裡非常感謝·林曉斌·老師在極客時間發布的文章,讓自己對資料庫有了乙個好的理解。感謝各位觀眾的耐心**,如有錯誤請指正,謝謝!

mysql 過程 動態執行sql

begin declare v sql varchar 500 declare v table name varchar 20 declare v date time varchar 20 set v date time date format now y m d select v date tim...

mysql中SQL執行過程詳解

mysql執行乙個查詢的過程,到底做了些什麼 實際上mysql執行的每一步都比較複雜,具體的過程如下 1 mysql客戶端和伺服器通訊 mysql客戶端和伺服器之間的通訊協議是 半雙工 的,這意味著,在任何乙個時刻,要麼由伺服器向客戶端傳送資料,要麼由客戶端向伺服器傳送資料,這兩個動作不能同時發生。...

Mysql中sql執行的過程

1 客戶端和伺服器建立連線,傳送請求 2 伺服器先檢查查詢快取。如果在查詢快取中發現了該sql,則會進行許可權校驗,許可權校驗通過,直接返回結果。如果查詢快取中沒有,則進入下面的步驟 對應查詢快取這一過程,8.0這一過程已經不存在了,8.0完全拋棄了這個功能 3 伺服器對sql進行解析。識別出sql...