SQL語句中的執行順序

這也是一篇不完全的翻譯,有興趣的讀者可以查看原文

下面的SQL語句的執行順序只是邏輯上的順序,在實際中優化器會選擇最省時省力的順序:

  1. FROM:這個只需要說一點的是JOIN這一步包含在FROM裏面,總之就是先確定表,加載所有表的所有行
  2. WHERE:過濾掉不需要的行
  3. GROUP BY:根據表達式或者列名來聚合(分組),分組完成後,所有的列只剩下了作爲組名的列,組內部只對聚合函數可見。
  4. 聚合函數:聚合函數相當於可以進入分組的內部,然後計算出一個只有一個值的結果,例如組內的最大最小平均總和。
  5. HAVING:過濾掉聚合後的不需要的行
  6. 窗口函數:在此時的所有行開窗口,並在窗口內執行窗口函數
  7. SELECT:選擇需要的列,也叫project,投射
  8. DISTINCT:在選擇的列裏面進行(xing)行(hang)去重
  9. UNION,INTERSECT,EXCEPT:對得到的結果進行集合操作
  10. ORDEY BY:對進行完集合操作後得到的結果集排序
  11. OFFECT:沒見過,不知道是幹嘛的,別人說“Don’t use offset”
  12. LIMIT,FETCH,TOP:最後選擇前幾行作爲最終的結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章