當前位置:首頁 » 編程語言 » mysql解析sql

mysql解析sql

發布時間: 2023-08-18 18:33:03

㈠ Mysql中Sql的執行過程

如果查詢緩存沒有命中,那麼SQL請求會進入分析器,分析器是用來分辨SQL語句的執行目的,其執行過程大致分為兩步:

表1 語法分析關鍵字然後再通過語法規則解析,判斷輸入的SQL 語句是否滿足MySQL語法,並且生成圖5的語法樹。由SQL語句生成的四個單詞中,識別出兩個關鍵字,分別是select 和from。根據MySQL的語法Select 和 from之間對應的是fields 欄位,下面應該掛接username;在from後面跟隨的是Tables欄位,其下掛接的是userinfo。

優化器的作用是對SQL進行優化,生成最有的執行方案。如圖6所示,前面提到的SQL解析器通過語法分析和語法規則生成了SQL語法樹。這個語法樹作為優化器的輸入,而優化器(黃色的部分)包含了邏輯變換和代價優化兩部分的內容。在優化完成以後會生成SQL執行計劃作為整個優化過程的輸出,交給執行器在存儲引擎上執行。

所處的位置如上圖所示,這節的重點在優化器中的邏輯變換和代價優化上。

邏輯變換也就是在關系代數基礎上進行變換,其目的是為了化簡,同時保證SQL變化前後的結果一致,也就是邏輯變化並不會帶來結果集的變化。其主要包括以下幾個方面:

這樣講概念或許有些抽象,通過圖7 來看看邏輯變化如何在SQL中執行的吧。

如圖7所示,從上往下共有4個步驟:
1. 針對存在的SQL語句,首先通過「否定消除」,去掉條件判斷中的「NOT」。語句由原來的「or」轉換成「and」,並且大於小於符號進行變號。藍色部分為修改前的SQL,紅色是修改以後的SQL。2. 等值傳遞,這一步很好理解分別降」t2.a=9」 和」t2.b=5」分別替換掉SQL中對應的值。3. 接下來就是常量表達式計算,將「5+7」計算得到「12」。4. 最後是常量表達式計算後的化簡,將」9<=10」化簡為」true」帶入到最終的SQL表達式中完成優化。

代價優化是用來確定每個表,根據條件是否應用索引,應用哪個索引和確定多表連接的順序等問題。為了完成代價優化,需要找到一個代價最小的方案。因此,優化器是通過基於代價的計算方法來決定如何執行查詢的(Cost-based Optimization)。簡化的過程如下:

這里將配置操作的代價分為MySQL 服務層和MySQL 引擎層,MySQL 服務層主要是定義CPU的代價,而MySQL 引擎層主要定義IO代價。MySQL 5.7 引入了兩個系統表mysql.server_cost和mysql.engine_cost來分別配置這兩個層的代價。如下:MySQL 服務層代價保存在表server_cost中,其具體內容如下:

由上可以看出創建臨時表的代價是很高的,尤其是內部的myisam或innodb臨時表。MySQL 引擎層代價保存在表engine_cost中,其具體內容如下:

目前io_block_read_cost和memory_block_read_cost默認值均為1,實際生產中建議酌情調大memory_block_read_cost,特別是對普通硬碟的場景。MySQL會根據SQL查詢生成的查詢計劃中對應的操作從上面兩張代價表中查找對應的代價值,並且進行累加形成最終執行SQL計劃的代價。再將多種可能的執行計劃進行比較,選取最小代價的計劃執行。

當分析器生成查詢計劃,並且經過優化器以後,就到了執行器。執行器會選擇執行計劃開始執行,但在執行之前會校驗請求用戶是否擁有查詢的許可權,如果沒有許可權,就會返回錯誤信息,否則將會去調用MySQL引擎層的介面,執行對應的SQL語句並且返回結果。例如SQL:「SELECT * FROM userinfo WHERE username = 'Tom';「假設 「username「 欄位沒有設置索引,就會調用存儲引擎從第一條開始查,如果碰到了用戶名字是」 Tom「, 就將結果集返回,沒有查找到就查看下一行,重復上一步的操作,直到讀完整個表或者找到對應的記錄。需要注意SQL語句的執行順序並不是按照書寫順序來的,順序的定義會在分析器中做好,一般是按照如下順序:

如果命中的記錄比較多,應用會從MySql Server一批批獲取數據

本文從MySQL中SQL語句的執行過程作為切入點,首先介紹了查詢請求的執行流程,其中將MySQL的處理分為MySQL Server層和MySQL存儲引擎層。通過介紹SQL語句的流轉,引出了後面要介紹的5大組件,他們分別是:連接器、查詢緩存、分析器、優化器、執行器。後面的內容中對每個組件進行了詳細的介紹。連接器,負責身份認證和許可權鑒別;查詢緩存,將查詢的結果集進行緩存,提高查詢效率;分析器,對SQL語句執行語法分析和語法規則,生成語法樹和執行計劃;優化器,包括邏輯變換和代價優化;執行器,在檢查用戶許可權以後對數據進行逐條查詢,整個過程遵守SQL語句的執行順序。

熱點內容
蘋果耳塞怎麼改安卓也能用 發布:2025-02-05 14:50:54 瀏覽:557
安卓如何鑒別手機真假 發布:2025-02-05 14:28:15 瀏覽:119
ffmpeglinux編譯 發布:2025-02-05 14:28:04 瀏覽:544
伺服器如何做界面 發布:2025-02-05 14:27:23 瀏覽:290
訪問學者單位推薦意見 發布:2025-02-05 14:13:05 瀏覽:853
微信密碼鎖忘了怎麼辦 發布:2025-02-05 14:11:07 瀏覽:311
web是什麼文件夾 發布:2025-02-05 14:11:05 瀏覽:235
對信訪問題調查 發布:2025-02-05 14:09:39 瀏覽:984
singlephp 發布:2025-02-05 14:09:24 瀏覽:774
資料庫的欄位命名規則 發布:2025-02-05 13:53:16 瀏覽:684