MySQL 查詢處理 SQL查詢執行順序
轉載自姜總的書
◇ 查詢處理:
· 物理查詢處理
MySQL的DB層有Parser與Optimizer兩個元件:
Parser用於分析SQL語句。
Optimizer用於對SQL語句最佳化,選取最優路徑來選取資料,若表上有索引,那麼最佳化器會判斷SQL語句是否可以利用該索引來進行最佳化。
透過Parser和Optimizer的解析和最佳化,這就是物理查詢的處理過程。
·邏輯查詢處理
(8)SELECT (9)DISTINCT <select_list>
(1)FROM <left_table>
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH {CUBE | ROLLUP}
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
(11)LIMIT <limit_number>
分析:
(1)FROM:對FROM子句中的左右表執行笛卡爾積,產生虛擬表VT1
(2)ON:對虛擬表VT1應用ON篩選,符合<join_condition>的行被插入虛擬表VT2中
(3)JOIN:若指定了左外連線或右外連線,那麼保留表中未匹配的行作為外部行新增到虛擬表VT2中,產生虛擬表VT3,若from包含兩個以上的表,則對VT3和下一個表重複執行(1)(2)(3)
(4)WHERE:對虛擬表VT3應用WHERE過濾條件,符合<where_condition>的記錄插入到虛擬表VT4中
(5)GROUP BY:據GROUP BY字句中的列,對VT4進行分組,產生虛擬表VT5
(6)WITH:對錶VT5進行CUBE或ROLLUP,產生虛擬表VT6
(7)HAVING:對VT6應用HAVING過濾器,符合<having_condition>的記錄才被插入虛擬表VT7
(8)SELECT:選擇指定的列,插入虛擬表VT8中
(9)DISTINCT:對VT8去重複資料,產生虛擬表VT9
(10)ORDER BY:對VT9中的行根據<order_by_list>進行排序,產生虛擬表VT10
(11)LIMIT:從VT10中取出指定行,產生虛擬表VT11,並返回查詢結果給使用者
◇ 查詢處理:
· 物理查詢處理
MySQL的DB層有Parser與Optimizer兩個元件:
Parser用於分析SQL語句。
Optimizer用於對SQL語句最佳化,選取最優路徑來選取資料,若表上有索引,那麼最佳化器會判斷SQL語句是否可以利用該索引來進行最佳化。
透過Parser和Optimizer的解析和最佳化,這就是物理查詢的處理過程。
·邏輯查詢處理
(8)SELECT (9)DISTINCT <select_list>
(1)FROM <left_table>
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH {CUBE | ROLLUP}
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
(11)LIMIT <limit_number>
分析:
(1)FROM:對FROM子句中的左右表執行笛卡爾積,產生虛擬表VT1
(2)ON:對虛擬表VT1應用ON篩選,符合<join_condition>的行被插入虛擬表VT2中
(3)JOIN:若指定了左外連線或右外連線,那麼保留表中未匹配的行作為外部行新增到虛擬表VT2中,產生虛擬表VT3,若from包含兩個以上的表,則對VT3和下一個表重複執行(1)(2)(3)
(4)WHERE:對虛擬表VT3應用WHERE過濾條件,符合<where_condition>的記錄插入到虛擬表VT4中
(5)GROUP BY:據GROUP BY字句中的列,對VT4進行分組,產生虛擬表VT5
(6)WITH:對錶VT5進行CUBE或ROLLUP,產生虛擬表VT6
(7)HAVING:對VT6應用HAVING過濾器,符合<having_condition>的記錄才被插入虛擬表VT7
(8)SELECT:選擇指定的列,插入虛擬表VT8中
(9)DISTINCT:對VT8去重複資料,產生虛擬表VT9
(10)ORDER BY:對VT9中的行根據<order_by_list>進行排序,產生虛擬表VT10
(11)LIMIT:從VT10中取出指定行,產生虛擬表VT11,並返回查詢結果給使用者
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1813489/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- SQL 查詢語句的執行順序解析SQL
- T-sql語句查詢執行順序SQL
- SQL邏輯查詢處理順序特別提醒SQL
- 查詢處理的邏輯順序
- MySQL之SQL邏輯查詢順序MySql
- Oracle 優化器與sql查詢執行順序Oracle優化SQL
- 順序查詢
- Oracle 最佳化器與sql查詢執行順序OracleSQL
- MYSQL學習筆記11: DQL查詢執行順序MySql筆記
- 【層次查詢】Hierarchical Queries之處理順序
- DNS查詢順序DNS
- DS靜態查詢之順序查詢
- 順序查詢和二分查詢
- SQL查詢關鍵字執行順序及記憶口訣SQL
- MySQL 查詢中保留 IN 中的順序MySql
- #查詢演算法#【1】簡單查詢:順序、折半查詢演算法
- MySQL 並列排名和順序排名查詢MySql
- MySQL邏輯查詢處理MySql
- DNS查詢順序以及方式DNS
- 順序表應用6:有序順序表查詢
- sql查詢是如何執行的?SQL
- sql mysql 執行順序 (4)MySql
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 查詢演算法集:順序查詢、二分查詢、插值查詢、動態查詢(陣列實現、連結串列實現)演算法陣列
- 查詢執行慢的SQL語句SQL
- 一條查詢sql的執行之路SQL
- Phoenix:在HBase上執行SQL查詢SQL
- 查詢sql語句執行次數SQL
- 查詢正在執行的SQL語句SQL
- SQL查詢的:子查詢和多表查詢SQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- 用並行查詢讓SQL Server加速執行並行SQLServer
- 【SQL查詢】集合查詢之INTERSECTSQL
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 查詢Oracle正在執行的SQL語句OracleSQL
- 查詢SQLSERVER執行過的SQL記錄SQLServer
- oracle 死鎖查詢處理Oracle