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語句的執行計劃。
相關文章
- 查詢處理的邏輯順序
- SQL邏輯查詢處理順序特別提醒SQL
- MySQL之SQL邏輯查詢順序MySql
- 《T-SQL查詢》讀書筆記Part 1.邏輯查詢處理知多少SQL筆記
- MySQL 查詢處理 SQL查詢執行順序MySql
- 如何處理 MySQL 萬用字元的模糊查詢MySql字元
- nodejs 連線 mysql 查詢事務處理NodeJSMySql
- SAP gateway處理multiple key的邏輯Gateway
- 淺談zip格式處理邏輯漏洞
- MongoDB之資料查詢(邏輯運算)MongoDB
- 從零手寫實現 nginx-11-檔案處理邏輯與 range 範圍查詢合併Nginx
- Nginx(二): worker 程式處理邏輯-流程框架Nginx框架
- Spring MVC的請求處理邏輯SpringMVC
- WM-QM未清TR處理邏輯
- Android 介面顯示與邏輯處理Android
- sql語句中較為重要的查詢邏輯SQL
- [java程式碼]業務邏輯查詢幫助類Java
- 從根上理解elasticsearch(lucene)查詢原理(1)-lucece查詢邏輯介紹Elasticsearch
- oracle 死鎖查詢處理Oracle
- 物理DG與邏輯DG的區別與邏輯DG同步異常處理方法
- Windows邏輯備份-EXPDP(保留5天內邏輯備份)批處理指令碼Windows指令碼
- MyBatis Like查詢處理%_符號MyBatis符號
- Oracle死鎖查詢及處理Oracle
- 11g 邏輯備庫簡單故障處理
- 微軟官方:SELECT語句邏輯處理順序微軟
- AR事務處理GL_DATE獲得邏輯
- Mysql優化系列之——優化器對子查詢的處理MySql優化
- MySQL Case-information_schema檢視查詢慢處理一例MySqlORM
- external-attacher原始碼分析(2)-核心處理邏輯分析原始碼
- kube-scheduler原始碼分析(2)-核心處理邏輯分析原始碼
- 創新實訓(十)比賽內部邏輯處理
- ORACLE 查詢語句處理過程(Oracle
- 查詢等待事件及處理指令碼事件指令碼
- mysql 邏輯備份 (mysqldump)MySql
- mysql的邏輯備份MySql
- 前端業務程式碼配置化處理條件判斷邏輯前端
- 關於 SAP Spartacus scss 處理邏輯裡的變數 $useLatestStylesCSS變數
- Spring專案處理分頁(邏輯和物理分頁)Spring