MySQL邏輯查詢處理
我們經常寫sql語句,但是sql語句的執行順序是怎樣的,這點是我們需要知道的。下面就分享一下sql語句的執行順序。
1、 from :對from子句中的左表和右表執行笛卡爾積,產生虛擬表VT1。
2、 ON:對虛擬表VT1應用ON篩選,只有那些符合join_condition的行才被插入虛擬表VT2中。
3、 JOIN:如果指定了outer join那麼保留表中未匹配的行作為外部行新增到虛擬表VT2中,產生虛擬表VT3。如果from子句包含兩個以上的表,則對上一個連線生成的結果表VT3和下一個表重複執行步驟1,知道處理完所有的表為止。
4、 Where:對虛擬表VT3應用where過濾條件,只有符合where_condition的記錄才被插入虛擬表VT4中。
5、 Group by:根據group by子句中的列,對VT4中的記錄進行分組操作,產生VT5.
6、 CUBE|ROLLUP:對錶VT5進行CUBE或ROLLUP操作,產生表VT6。
7、 Having:對虛擬表VT6應用HAVING過濾器,只有符合having_condition的記錄才被插入虛擬表VT7中。
8、 Select:第二次執行select操作,選擇指定的列,插入到虛擬表VT8中。
9、 Distinct:去除重複資料,產生虛擬表VT9。
10、 Order by:將虛擬表VT9中的記錄按照order_by_list進行排序操作,產生虛擬表VT10.
11、 Limit:取指定行的記錄,產生虛擬包VT11,並返回給查詢使用者。
注:上述的執行順序只是sql語句的邏輯執行順序,因為表中存在索引和分割槽等優化資料庫的物理操作,具體執行sql語句的時候可能會根據優化的不同而採取不同的執行方式。所以sql語句具體是怎麼執行的,還需要看sql語句的執行計劃。
相關文章
- nodejs 連線 mysql 查詢事務處理NodeJSMySql
- 如何處理 MySQL 萬用字元的模糊查詢MySql字元
- SAP gateway處理multiple key的邏輯Gateway
- 淺談zip格式處理邏輯漏洞
- Android 介面顯示與邏輯處理Android
- Spring MVC的請求處理邏輯SpringMVC
- 從零手寫實現 nginx-11-檔案處理邏輯與 range 範圍查詢合併Nginx
- Nginx(二): worker 程式處理邏輯-流程框架Nginx框架
- 從根上理解elasticsearch(lucene)查詢原理(1)-lucece查詢邏輯介紹Elasticsearch
- Mysql優化系列之——優化器對子查詢的處理MySql優化
- MySQL Case-information_schema檢視查詢慢處理一例MySqlORM
- MySQL查詢中Sending data佔用大量時間的問題處理MySql
- SQL-基礎語法 - 條件查詢 - 邏輯運算SQL
- Spring專案處理分頁(邏輯和物理分頁)Spring
- 創新實訓(十)比賽內部邏輯處理
- kube-scheduler原始碼分析(2)-核心處理邏輯分析原始碼
- external-attacher原始碼分析(2)-核心處理邏輯分析原始碼
- 創新實訓(七)——比賽(Contest)內部邏輯處理
- 關於 SAP Spartacus scss 處理邏輯裡的變數 $useLatestStylesCSS變數
- MySQL查詢MySql
- Spring Cloud Stream消費失敗後的處理策略(二):自定義錯誤處理邏輯SpringCloud
- (十三)資料庫查詢處理之QueryExecution(2)資料庫
- Oracle 高水位查詢和處理方法彙總Oracle
- (十) 資料庫查詢處理之排序(sorting)資料庫排序
- 前端業務程式碼配置化處理條件判斷邏輯前端
- SAP CRM Product Sales status在中介軟體中的處理邏輯
- MySQL提升筆記(1):MySQL邏輯架構MySql筆記架構
- MySQL - 資料查詢 - 簡單查詢MySql
- mysql查詢模型MySql模型
- MYsql 子查詢MySql
- 【MySQL】多表查詢MySql
- mysql多表查詢MySql
- MySQL子查詢MySql
- MySQL慢查詢MySql
- MySQL 多表查詢MySql
- mysql 模糊查詢MySql
- MySQL 慢查詢MySql
- 使用並查集處理集合的合併和查詢問題並查集
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql