mysql 二 sql執行的曲折

2021-09-13 12:16:24 字數 2582 閱讀 3916

客戶端 =》 聯結器 =》 查詢快取 =》 有快取 =》 返回客戶端

=》 沒有快取 =》 分析器 =》 優化器 =》 執行器 =》 binlog[歸檔日誌] =》 儲存引擎

以上可以分為兩個部分:

首先來說[聯結器],也就是我們每次使用mysql的時候,我們需要輸入host ip username password來做連線登入mysql,我們做了這個之後,mysql

需要作出回應呀,看看有沒有這個叫[什麼鬼]的小夥子,再看看這個[什麼鬼]小夥子有沒有一系列的[特權]呀。。。就拿php來說,在使用mysql的時候,不管是

mysqli還是pdo,都需先去連線mysql,同樣的mysql在這些連線後也需要作出回應,那麼這個[守門的]就是聯結器。同時也需要注意:mysql

聯結器,比如說我們當前的使用者test,它現在是乙個屌絲,什麼都沒有,它連上了mysql,但是之後,突然走了狗shi運。牛pi了。但是,它進去mysql之後就沒有

出來過,那麼就相當於它還沒有拿到特權,還是個屌絲。只有它重新離開再進去,它的特權才能生效。

通訊方式 【半雙工–對講機】【全雙工–打**】【單工–收音機】

mysql 是半雙工

客戶端一旦開始傳送訊息另一端要接受完整個訊息才能響應

客戶端一旦開始接受資料沒法停下來傳送指令

show processlist;/show full processlist;

sleep

query

locked

sorting result執行緒正在

sending data向請求端返回資料

再來說[快取],mysql的快取預設是沒有開啟的,也就是要我們手動開啟。

show variables like query_cache_type= 0關閉 | 1開啟 | 2按需開啟

它的快取儲存形式就是像key => value這種形式,key就是我們的查詢語句,比如:select * from users;它的value就是我們查詢到的結果集。如果

我們開啟快取這個功能呢,我們第一次查詢結果就會放到快取中。第二次再次查詢[相同的]的語句,就會命中快取。它就會直接返回快取中的結果集,沒有命中,

就會再次查詢。雖然說快取比較好,有時也加快了我們的查詢速度,但是,但是,但是。它的使用限制確實非常有限。

1.) 要想命中快取,兩次的查詢語句必須一模一樣

2.) 查詢的時候,select必須是作用於表,也就是你的select * from [table_name];才有作用,如果是select 1+1;這是不會有快取產生的

3.) 比如我們第一查詢的時候,有一條記錄,在第二次查詢的時候,你新增了一條記錄,那麼快取一樣會失效。就是我們只要涉及到[增,刪,改]快取馬上就不會起作用了,

就算是和第一次的查詢語句一樣,快取也會失效

4.) 就是我們要得到的資料塊,特別大,特別多的時候,我們使用快取這也是非常消耗記憶體的

5.) 當查詢的時候,我們使用函式,那麼快取一樣不會起作用

檢視是否使用快取語句show status like "qcache%"

[分析器] 在mysql沒有命中快取的時候,就會到達下一站,分析器。分析器又分為詞法分析語法分析

詞法分析:就是mysql它的一條sql語句由那些組成,就是mysql自己的分詞[token],我的理解應該就是把寫的一條sql語句一點一點整理出來,然後組成

mysql它自己所能識別的

語法分析:語法分析應該就是分析經過詞法分析的sql語句是否符合mysql的語法

[優化器] 到了這一階段,可以說,基本上已經走到了一半了。但是還有乙個預處理階段和查詢優化器階段;其實查詢優化,就好比是查詢執行的路徑

使用等價變化規則

優化count min max 等函式

覆蓋索引掃瞄

子查詢優化

提前終止查詢 limit 100

in的優化 【全表掃瞄】

[執行器] 這基本就是最後階段了,呼叫執行引擎。當選擇了最有的執行方案或執行路徑之後,mysql就會執行你的sql語句了。

[返回客戶端] 最後返回你的就是成功或者失敗,以及失敗原因

mysql學習(二) sql執行流程

上篇文章對mysql的基本架構和儲存引擎有了簡單的認識,今天我們需要對sql的執行流程有個簡單的認識,通過這篇文章,我們可以詳細的了解並知道一條sql在mysql中是如何執行下來的。大體來說,mysql主要分為server層和儲存資料層 儲存引擎層 server層包括聯結器 查詢快取 分析器 優化器...

mysql執行語句 mysql執行sql語句過程

流程概述 mysql得到sql語句後,大概流程如下 1.sql的解析器 負責解析和 sql 2.預處理器 對解析後的sql樹進行驗證 3.查詢優化器 得到乙個執行計畫 4.查詢執行引擎 得到資料結果集 5.將資料放回給呼叫端。流程圖如下所示 分發器及快取階段 首先,如果系統的快取功能開啟著的話,sq...

mysql的sql執行計畫

引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫sql語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行同樣的...