資源描述:
《sql語句執(zhí)行順序》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、一、sql語句的執(zhí)行步驟:1)語法分析,分析語句的語法是否符合規(guī)范,衡量語句中各表達式的意義。2)語義分析,檢查語句中涉及的所有數(shù)據(jù)庫對象是否存在,且用戶有相應的權限。3)視圖轉換,將涉及視圖的查詢語句轉換為相應的對基表查詢語句。4)表達式轉換,將復雜的SQL表達式轉換為較簡單的等效連接表達式。5)選擇優(yōu)化器,不同的優(yōu)化器一般產(chǎn)生不同的“執(zhí)行計劃”6)選擇連接方式,ORACLE有三種連接方式,對多表連接ORACLE可選擇適當?shù)倪B接方式。7)選擇連接順序,對多表連接ORACLE選擇哪一對表先連接,選擇這兩表中哪個表做為源數(shù)據(jù)表。8)選擇數(shù)據(jù)的搜索路徑,根據(jù)
2、以上條件選擇合適的數(shù)據(jù)搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。9)運行“執(zhí)行計劃”二、oracle共享原理:???????ORACLE將執(zhí)行過的SQL語句存放在內存的共享池(sharedbufferpool)中,可以被所有的數(shù)據(jù)庫用戶共享當你執(zhí)行一個SQL語句(有時被稱為一個游標)時,如果它和之前的執(zhí)行過的語句完全相同,ORACLE就能很快獲得已經(jīng)被解析的語句以及最好的執(zhí)行路徑.這個功能大大地提高了SQL的執(zhí)行性能并節(jié)省了內存的使用三、oracle語句提高查詢效率的方法:1:wherecolumnin(select*from...where
3、...);2:...whereexists(select'X'from...where...);第二種格式要遠比第一種格式的效率高。在Oracle中可以幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢使用EXIST,Oracle系統(tǒng)會首先檢查主查詢,然后運行子查詢直到它找到第一個匹配項,這就節(jié)省了時間Oracle系統(tǒng)在執(zhí)行IN子查詢時,首先執(zhí)行子查詢,并將獲得的結果列表存放在在一個加了索引的臨時表中避免使用having字句避免使用HAVING子句,HAVING只會在檢索出所有記錄之后才對結果集進行過濾.這個處理需要排序,總計等操作.如果能通過W
4、HERE子句限制記錄的數(shù)目,那就能減少這方面的開銷SQLSelect語句完整的執(zhí)行順序:1、from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、where子句基于指定的條件對記錄行進行篩選;3、groupby子句將數(shù)據(jù)劃分為多個分組;4、使用聚集函數(shù)進行計算;5、使用having子句篩選分組;6、計算所有的表達式;7、使用orderby對結果集進行排序。Oraclesql語句執(zhí)行順序四、SQLSelect語句完整的執(zhí)行順序:1、from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、where子句基于指定的條件對記錄行進行篩選;3、groupby子句將數(shù)據(jù)劃分為多個分組;4、使
5、用聚集函數(shù)進行計算;5、使用having子句篩選分組;6、計算所有的表達式;7、select的字段;8、使用orderby對結果集進行排序。SQL語言不同于其他編程語言的最明顯特征是處理代碼的順序。在大多數(shù)據(jù)庫語言中,代碼按編碼順序被處理。但在SQL語句中,第一個被處理的子句式FROM,而不是第一出現(xiàn)的SELECT。SQL查詢處理的步驟序號:(8)1SELECT(9)DISTINCT(11)2(1)FROM3(3)JOIN6、>4(2)ON5(4)WHERE6(5)GROUPBY7(6)WITH{CUBE
7、ROLLUP}8(7)HAVING9(10)ORDERBY 以上每個步驟都會產(chǎn)生一個虛擬表,該虛擬表被用作下一個步驟的輸入。這些虛擬表對調用者(客戶端應用程序或者外部查詢)不可用。只有最后一步生成的表才會會給調用者。如果沒有在查詢中指定某一個子句,將跳過相應的步驟?! ∵壿嫴樵兲幚黼A段簡介: 1、FROM:對F
8、ROM子句中的前兩個表執(zhí)行笛卡爾積(交叉聯(lián)接),生成虛擬表VT1?! ?、ON:對VT1應用ON篩選器,只有那些使為真才被插入到TV2?! ?、OUTER(JOIN):如果指定了OUTERJOIN(相對于CROSSJOIN或INNERJOIN),保留表中未找到匹配的行將作為外部行添加到VT2,生成TV3。如果FROM子句包含兩個以上的表,則對上一個聯(lián)接生成的結果表和下一個表重復執(zhí)行步驟1到步驟3,直到處理完所有的表位置?! ?、WHERE:對TV3應用WHERE篩選器,只有使為true的行才插入TV4?! ?、GROUPBY:按GROUPBY子句中的列列
9、表對TV4中的行進行分組,生成TV5?! ?、CUTE
10、ROLLUP:把超組插入