mysql 執行順序 SQL語句執行順序分析

最近在做一個數據庫的大作業,算是複習了下MySql裏面比較複雜的一些語句的用法,如Left Join之類的。在這裏就不對具體語法進行記錄了,希望能在以後經常用到,而不是隔好長時間用一次。在這裏就記錄下MySql語句的執行順序就好了。


首先,SELECT語句的基本語法如下:   

SELECT selection_list # What columns to select   
  
  FROM table_list # Which tables to select rows from   
  
  WHERE primary_constraint # What conditions rows must satisfy   
  
  GROUP BY grouping_columns # How to group results   
  
  HAVING secondary_constraint # Secondary conditions rows must satisfy   
  
  ORDER BY sorting_columns # How to sort results   
  
  LIMIT from, count; # Limiting row count on results

對於MySQL,除了第一行,其他部分都是可選的,有的DBMS要求FROM從句也是必須的。   
  
  SQL Select語句完整的執行順序【從DBMS使用者角度】:   
  
  1、from子句組裝來自不同數據源的數據;   
  
  2、where子句基於指定的條件對記錄行進行篩選;   
  
  3、group by子句將數據劃分爲多個分組;   
  
  4、使用聚集函數進行計算;   
  
  5、使用having子句篩選分組;   
  
  6、計算所有的表達式;   
  
  7、使用order by對結果集進行排序。   
  
  SQL Select語句的執行步驟【從DBMS實現者角度,這個對我們用戶意義不大】:   
  
  1)語法分析,分析語句的語法是否符合規範,衡量語句中各表達式的意義。   
  
  2) 語義分析,檢查語句中涉及的所有數據庫對象是否存在,且用戶有相應的權限。   
  
  3)視圖轉換,將涉及視圖的查詢語句轉換爲相應的對基表查詢語句。   
  
  4)表達式轉換, 將複雜的 SQL 表達式轉換爲較簡單的等效連接表達式。   
  
  5)選擇優化器,不同的優化器一般產生不同的“執行計劃”   
  
  6)選擇連接方式, ORACLE 有三種連接方式,對多表連接 ORACLE 可選擇適當的連接方式。   
  
  7)選擇連接順序, 對多表連接 ORACLE 選擇哪一對錶先連接,選擇這兩表中哪個表做爲源數據表。   
  
  8)選擇數據的搜索路徑,根據以上條件選擇合適的數據搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。   
  
  9)運行“執行計劃”。   
  
  舉例說明:   

SELECTstate AS State,AVG((TO_DAYS(death)-TO_DAYS(birth))/365) AS Age   
  
  FROM president   
  
  WHERE death IS NOT NULL   
  
  GROUP BY state   
  
  ORDER BY Age;   

這句SQL查詢的意思是:   
  
  從總統表中查詢已經死亡的總統,然後按州分組,然後針對每個組計算總統的平均壽命【AVG((TO_DAYS(death)-TO_DAYS(birth))/365)】,然後按壽命升序排列。   
  
  最後的結果就是類似這個樣子:   

+-------+-----------+   
  
  | State | Age |   
  
  +-------+-----------+   
  
  | KY | 56.208219 |   
  
  | VT | 58.852055 |   
  
  | NC | 60.141096 |   
  
  | OH | 62.866145 |   
  
  | NH | 64.917808 |   
  
  | NY | 69.342466 |   
  
  | NJ | 71.315068 |   
  
  | TX | 71.476712 |   
  
  | MA | 72.642009 |   
  
  | VA | 72.822945 |   
  
  | PA | 77.158904 |   
  
  | SC | 78.284932 |   
  
  | CA | 81.336986 |   
  
  | MO | 88.693151 |   
  
  | IA | 90.254795 |   
  
  | IL | 93.391781 |   
  
  +-------+-----------+   


轉自:mysql 執行順序 SQL語句執行順序分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章