1. 程式人生 > >MySQL的語句執行順序

MySQL的語句執行順序

  MySQL的語句一共分為11步,如下圖所標註的那樣,最先執行的總是FROM操作,最後執行的是LIMIT操作。其中每一個操作都會產生一張虛擬的表,這個虛擬的表作為一個處理的輸入,只是這些虛擬的表對使用者來說是透明的,但是隻有最後一個虛擬的表才會被作為結果返回。如果沒有在語句中指定某一個子句,那麼將會跳過相應的步驟。

下面我們來具體分析一下查詢處理的每一個階段

  • 1、FORM: 對FROM的左邊的表和右邊的表計算笛卡爾積。產生虛表VT1
  • 2、ON: 對虛表VT1進行ON篩選,只有那些符合的行才會被記錄在虛表VT2中。
  • 3、JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那麼保留表中未匹配的行就會作為外部行新增到虛擬表VT2中,產生虛擬表VT3, rug from子句中包含兩個以上的表的話,那麼就會對上一個join連線產生的結果VT3和下一個表重複執行步驟1~3這三個步驟,一直到處理完所有的表為止。
  • 4、WHERE: 對虛擬表VT3進行WHERE條件過濾。只有符合的記錄才會被插入到虛擬表VT4中。
  • 5、GROUP BY: 根據group by子句中的列,對VT4中的記錄進行分組操作,產生VT5.
  • 6、CUBE | ROLLUP: 對錶VT5進行cube或者rollup操作,產生表VT6.
  • 7、HAVING: 對虛擬表VT6應用having過濾,只有符合的記錄才會被 插入到虛擬表VT7中。
  • 8、SELECT: 執行select操作,選擇指定的列,插入到虛擬表VT8中。
  • 9、DISTINCT: 對VT8中的記錄進行去重。產生虛擬表VT9.
  • 10、ORDER BY: 將虛擬表VT9中的記錄按照進行排序操作,產生虛擬表VT10.
  • 11、LIMIT:取出指定行的記錄,產生虛擬表VT11, 並將結果返回。

注意!

  在以上每個步驟內部是按照從左到右的方式執行的,比如where有多個條件時從左到右執行。

相關推薦

Mysql語句執行順序

tinc .com 上一個 取出 col 圖片 TP 需要 聚合操作 MySQL的語句執行順序 MySQL的語句一共分為11步,如下圖所標註的那樣,最先執行的總是FROM操作,最後執行的是LIMIT操作。其中每一個操作都會產生一張虛擬的表,這個虛擬的表作為一個處理的輸入,

Mysql 語句執行順序

1.Mysql語法順序,即當sql中存在下面的關鍵字時,它們要保持這樣的順序: select[distinct]  from   join   on  where  group by   having   union   order by    limit 2.Mys

MySQL sql語句執行順序

left join left 笛卡爾積 ner 別名 join 例如 結果 detail sql語句select語句查詢順序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <

python 3 mysql sql邏輯查詢語句執行順序

shanghai 不能 結果 utf8 才會 right 完成 並且 分享 python 3 mysql sql邏輯查詢語句執行順序 一 、SELECT語句關鍵字的定義順序 SELECT DISTINCT <select_list> FROM <left

mysql優化必知(mysql語句執行順序

distinct 笛卡爾 技術分享 應用 一個 body where條件 img 處理 MySQL的語句執行順序 MySQL的語句一共分為11步,如下圖所標註的那樣,最先執行的總是FROM操作,最後執行的是LIMIT操作。其中每一個操作都會產生一張虛擬的表,這個虛擬的表

mysql五補充部分:SQL邏輯查詢語句執行順序

std data 根據 使用 cor 分析 執行過程 笛卡爾 不同的 閱讀目錄 一 SELECT語句關鍵字的定義順序 二 SELECT語句關鍵字的執行順序 三 準備表和數據 四 準備SQL邏輯查詢測試語句 五 執行順序分析 一 SELECT語句關鍵字的定義

Mysql補充部分:SQL邏輯查詢語句執行順序

num 支持 重復數 mysql 當我 每次 列表 sha mysq 一 SELECT語句關鍵字的定義順序 SELECT DISTINCT <select_list> FROM <left_table> <join_typ

mysql第四篇--SQL邏輯查詢語句執行順序

l數據庫 分組操作 一定的 內容 isp 新建 處理 hid 表示 mysql第四篇--SQL邏輯查詢語句執行順序 一.SQL語句定義順序 SELECT DISTINCT <select_list> FROM <left_table> <jo

【轉載】mysql語句寫作順序以及執行順序

image 沒有 賬號 -- 執行流程 http .... mage rom msyql概念性總結: 數據庫賬號密碼:所謂數據庫賬號密碼,指的是數據庫軟件的賬號和密碼,並非數據庫表的賬號密碼(表是沒有密碼的); MYSQL中sql的寫作及執行順序: 1:

關於sql和MySQL語句執行順序

sql和mysql執行順序,發現內部機制是一樣的。最大區別是在別名的引用上。  一、sql執行順序  (1) from (3) join (2) on (4) where (5) group by(開始使用select中的別名,後面的語句中都可以使用) (6) avg,s

Mysql----SQL查詢語句執行順序

SQL查詢語句執行順序如下: (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table>(3) <join_type> JOIN <right_table>

MySQL語句執行順序

  MySQL的語句一共分為11步,如下圖所標註的那樣,最先執行的總是FROM操作,最後執行的是LIMIT操作。其中每一個操作都會產生一張虛擬的表,這個虛擬的表作為一個處理的輸入,只是這些虛擬的表對使用者來說是透明的,但是隻有最後一個虛擬的表才會被作為結果返回。

MySQL的 SQL邏輯查詢語句執行順序

最後,這篇文章是我讀《MySQL技術內幕:SQL程式設計》而總結出來的,對於書中有的東西講的比較“粗”,可能是我的水平沒有達到人家作者要求的水平,導致閱讀起來,不是很舒服,所以,這篇博文,將會非常細緻的進行總結。只有你想不到,沒有你做不到。能看懂麼?先來一段虛擬碼,首先你能看

oracle查詢語句執行順序

lin oracle查詢 etc utl columns contain 處理 text lec 完整的查詢語句類似是這樣的: select ..., ROWNUM from table where <where clause> group by &

45、SQL邏輯查詢語句執行順序

mysq 一定的 gif 行數據 查詢語句 客戶 prim 記錄 測試表 一 SELECT語句關鍵字的定義順序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> J

SQL邏輯查詢語句執行順序 需要重新整理

lis highlight 虛擬表 發生 最終 數據處理 adding sql查詢 邏輯語句 一.SQL語句定義順序 1 2 3 4 5 6 7 8 9 10 SELECT DISTINCT <select_list> FROM <l

C for迴圈語句執行順序

發現居然搞不清楚最基礎的東西了,反思。。。   for(表示式1;表示式2;表示式3){迴圈體} 知道其的語句執行順序對我們來說可以避免很多失誤   我們可以利用下面這個小程式輕易測出其內在的語句迴圈順序: #include<stdio.h>

java中try catch語句執行順序簡介

package com.string_lc; /** * @filename Test.java * @author l * @description */ public class Test { public static void main(String[] args) {

SQL邏輯查詢語句執行順序

number HERE 語句 order distinct type limit con lis SELECT語句語法順序 SELECT DISTINCT <select_list> FROM <left_table> <join_

ORACLE中查詢語句執行順及where部分條件執行順序測試 Oracle中的一些查詢語句及其執行順序 Select 語句執行順序以及如何提高Oracle 基本查詢效率

Oracle中的一些查詢語句及其執行順序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查詢條件:1)LIKE:模糊查詢,需要藉助兩個萬用字元,%:表示0到多個字元;_:標識單個字元。2)IN(list):用來取出符合列表範圍中的資料。3)NOT I