1. 程式人生 > >關於sql語句的執行順序問題

關於sql語句的執行順序問題

      我做的第一個專案是.net的網站,記得剛進專案組的時候,我組長讓我調查關於sql語句的執行順序,現在還清楚的記得當時自己是百度到的,現在想想真二,如果別人只是要知道答案的話,他為啥不自己百度呢!在之後的學習之中,漸漸瞭解到關於sql語句的執行順序了。這些看來可能都是理論的事,在後來的學習中,會慢慢的瞭解。這也是決定你這個語句查詢效率的關鍵,大概如下:

  1. FROM:對FROM子句中的前兩個表執行笛卡爾積(Cartesian product)(交叉聯接),生成虛擬表VT1
  2. ON:對VT1應用ON篩選器。只有那些使<join_condition>為真的行才被插入VT2。
  3. OUTER(JOIN):
    如 果指定了OUTER JOIN(相對於CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部聯接把左表標記為保留表,右外部聯接把右表標記為保留表,完全外部聯接把兩個表都標記為保留表)中未找到匹配的行將作為外部行新增到 VT2,生成VT3.如果FROM子句包含兩個以上的表,則對上一個聯接生成的結果表和下一個表重複執行步驟1到步驟3,直到處理完所有的表為止。
  4. WHERE:對VT3應用WHERE篩選器。只有使<where_condition>為true的行才被插入VT4.
  5. GROUP BY:按GROUP BY子句中的列列表對VT4中的行分組,生成VT5.
  6. CUBE|ROLLUP:把超組(Suppergroups)插入VT5,生成VT6.
  7. HAVING:對VT6應用HAVING篩選器。只有使<having_condition>為true的組才會被插入VT7.
  8. SELECT:處理SELECT列表,產生VT8.
  9. DISTINCT:將重複的行從VT8中移除,產生VT9.
  10. ORDER BY:將VT9中的行按ORDER BY 子句中的列列表排序,生成遊標(VC10).
  11. TOP:從VC10的開始處選擇指定數量或比例的行,生成表VT11,並返回呼叫

相關推薦

MySQL sql語句執行順序

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

SQL語句執行順序

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

SQL 語句執行順序

在SQL中執行的順序 1. 先連線from後的資料來源(若有join,則先執行on後條件,再連線資料來源)。2. 執行where條件3. 執行group by4.執行having5.執行order by6.輸出結果。 完整的順序: FROMONJOINWHEREGROUP B

Oracle sql語句執行順序

Oracle sql語句執行順序 (2010-10-14 16:05:24) sql語法的分析是從右到左 一、sql語句的執行步驟: 1)語法分析,分析語句的語法是否符合規範,衡量語句中各表示式的意義。 2)語義分析,檢查語句中涉及的所有資料庫物件是否存在,且使用者

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

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

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

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

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

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

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

關於sql和MySQL的語句執行順序

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

SQL邏輯查詢語句執行順序

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

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

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

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

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

mysql中的SQL語句執行順序

sql語句 light highlight bsp dep 原因 limit group by ren 1. from2. on3. join4. where5. group by6. with7. having8. select9. distinct10. order b

MySQL查看SQL語句執行效率

博客 union pan art 顯示 uniq left join 匹配 article Explain命令在解決數據庫性能上是第一推薦使用命令,大部分的性能問題可以通過此命令來簡單的解決,Explain可以用來查看 SQL 語句的執行效 果,可以幫助選擇更好的索引和優化

oracle查詢語句執行順序

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

sql語句執行碰到的問題

substr 函數 問題 ring sql語句 執行 查看 bsp 問題: 問題:傳遞給 LEFT 或 SUBSTRING 函數的長度參數無效 原因:在LEFT或SUBSTRING 中計算出來的長度是負數導致的 解決方法: 1)逐個排查法,2)先把語句執行一下,查看中斷的

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

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

mysql 如何查看sql語句執行時間和效率

訪問 執行時間 subquery ber 如果 pan from xtra 重要 查看執行時間 1 show profiles; 2 show variables;查看profiling 是否是on狀態; 3 如果是off,則 set profiling = 1; 4 執