如果想深入學習 MySQL ,那麼應該從宏觀的架構上面著手,這篇我們學習 MySQL 查詢語句執行的流程,希望對大家有幫助!
本篇文章MySQL 版本為8.0.18
架構圖
解析器
解析器的作用是針對客戶端傳來的SQL 語句進行以下工作:
- 語法解析:檢查SQL 語句的語法,括號、引號是否閉合等
- 詞法解析:把SQL 語句中的關鍵字、表名、欄位名稱分割成一個個節點,最後得到一顆解析樹
預處理器
#解析器主要是檢查語法詞法方面,但是如果語法詞法都正確,但是表、字段是不存在的,那麼這段SQL 語句也是無法正確執行的。
所以預處理器的作用是:語意解析,判斷解析樹的語意是否正確,表、字段這些是否存在,預處理後會得到一顆新的解析樹。
查詢最佳化器
查詢最佳化器結構
#在MySQL 中一條SQL 語句的執行方式有多種,雖然最終都會得到相同的結果,但是存在開銷上的差異,具體選擇哪一種執行方式是由查詢優化器來決定的。比方說:
- 表中有多個索引可以選擇,具體選擇哪一個索引
- 當我們對多張表進行關聯查詢時,以哪一張表的數據為基準表
查詢最佳化器是基於開銷(cost)的最佳化器,它的工作原理是根據解析樹產生的多種執行計劃,會評估各種執行方式所需的開銷(cost),最終會得到一個開銷最小的執行計劃作為最終方案。
但是這個開銷最小的執行方式不一定是最優的執行方式,例如本該使用索引,卻進行了全表掃描等。雖然查詢優化器中有《優化》兩個字,但這個優化並不是萬能的,很多時候更需要考慮 SQL 語句寫得是否合理。
邏輯查詢最佳化
邏輯查詢最佳化主要負責進行一些關係代數對SQL 語句進行最佳化,使SQL 語句執行效率更高
邏輯查詢優化我們可以使用幾個案例來簡單理解
-
子查詢合併
#合併前
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=1) OR EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=2) );
合併後
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND (t2.b2=1 OR t2.b2=2) );
把多個子查詢透過合併查詢條件合併查詢,把多次連線運算減少為單次表掃描和單次連線
-
等價謂詞重寫
#像我們熟悉的like 模糊查詢,% 寫在條件後面才會進行索引範圍查詢,其實這是查詢優化器的功勞
假設使用的條件都是有建立索引的,重寫前
SELECT * FROM USERINFO WHERE name LIKE 'Abc%';
重寫後
SELECT * FROM USERINFO WHERE name >= 'Abc' AND name < 'Abd';
這就是為什麼能進行索引範圍查詢的答案
-
條件簡化
條件簡化也是利用一些等式、代數關係來實現簡化
- 去除表達式中的冗餘括號,減少語法分析時產生的AND和OR 樹的層次,例如
((a AND b) AND (c AND d))
簡化為a AND b AND c AND d
- 常數傳遞,例如
col1 = col2 AND col2 = 3
簡化為col1 = 3 AND col2 = 3
- 表達式計算,對於一些可直接求解的表達式會轉換為最終的計算結果,例如
col1 = 1 2
簡化為col1 = 3
- 去除表達式中的冗餘括號,減少語法分析時產生的AND和OR 樹的層次,例如
物理查詢最佳化
物理查詢最佳化主要做的工作是根據SQL語句分別對多種執行計畫進行開銷的評估
物理查詢最佳化主要解決以下幾個問題:
單表掃描中採用哪一種方式是開銷最小的(掃描索引回表or 全表掃描)
存在表連接的時候使用哪種連接方式是開銷最小的
代價評估公式 | |
---|---|
N_page * a_page_IO_time N_tuple * a_tuple_CPU_time | |
C_index N_page_index * a_page_IO_time |
以上是MySQL學習之聊查詢語句執行流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL通過異步、半同步和組複製三種模式處理數據複製。 1)異步複製性能高但可能丟失數據。 2)半同步複製提高數據安全性但增加延遲。 3)組複製支持多主複製和故障轉移,適用於高可用性需求。

EXPLAIN語句可用於分析和提升SQL查詢性能。 1.執行EXPLAIN語句查看查詢計劃。 2.分析輸出結果,關注訪問類型、索引使用情況和JOIN順序。 3.根據分析結果,創建或調整索引,優化JOIN操作,避免全表掃描,以提升查詢效率。

使用mysqldump進行邏輯備份和MySQLEnterpriseBackup進行熱備份是備份MySQL數據庫的有效方法。 1.使用mysqldump備份數據庫:mysqldump-uroot-pmydatabase>mydatabase_backup.sql。 2.使用MySQLEnterpriseBackup進行熱備份:mysqlbackup--user=root--password=password--backup-dir=/path/to/backupbackup。恢復時,使用相應的命

MySQL慢查詢的主要原因包括索引缺失或不當使用、查詢複雜度、數據量過大和硬件資源不足。優化建議包括:1.創建合適的索引;2.優化查詢語句;3.使用分錶分區技術;4.適當升級硬件。

MySQL視圖是基於SQL查詢結果的虛擬表,不存儲數據。 1)視圖簡化複雜查詢,2)增強數據安全性,3)維護數據一致性。視圖是數據庫中的存儲查詢,可像表一樣使用,但數據動態生成。

mysqldiffersfromothersqldialectsinsyntaxforlimit,自動啟動,弦樂範圍,子征服和表面上分析。 1)MySqluessLipslimit,whilesqlserverusestopopandoraclesrontersrontsrontsrontsronnum.2)

MySQL分區能提升性能和簡化維護。 1)通過按特定標準(如日期範圍)將大表分成小塊,2)物理上將數據分成獨立文件,3)查詢時MySQL可專注於相關分區,4)查詢優化器可跳過不相關分區,5)選擇合適的分區策略並定期維護是關鍵。

在MySQL中,如何授予和撤銷權限? 1.使用GRANT語句授予權限,如GRANTALLPRIVILEGESONdatabase_name.TO'username'@'host';2.使用REVOKE語句撤銷權限,如REVOKEALLPRIVILEGESONdatabase_name.FROM'username'@'host',確保及時溝通權限變更。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具