資源描述:
《sql語句執(zhí)行順序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、sql語句執(zhí)行順序sql執(zhí)行順序和原理一、sql語句的執(zhí)行步驟:1)語法分析,分析語句的語法是否符合規(guī)范,衡量語句中各表達式的意義。2)語義分析,檢查語句中涉及的所有數(shù)據(jù)庫對象是否存在,且用戶有相應(yīng)的權(quán)限。3)視圖轉(zhuǎn)換,將涉及視圖的查詢語句轉(zhuǎn)換為相應(yīng)的對基表查詢語句。4)表達式轉(zhuǎn)換,將復(fù)雜的SQL表達式轉(zhuǎn)換為較簡單的等效連接表達式。5)選擇優(yōu)化器,不同的優(yōu)化器一般產(chǎn)生不同的“執(zhí)行計劃”6)選擇連接方式,ORACLE有三種連接方式,對多表連接ORACLE可選擇適當(dāng)?shù)倪B接方式。7)選擇連接順序,對多表連
2、接ORACLE選擇哪一對表先連接,選擇這兩表中哪個表做為源數(shù)據(jù)表。8)選擇數(shù)據(jù)的搜索路徑,根據(jù)以上條件選擇合適的數(shù)據(jù)搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。9)運行“執(zhí)行計劃”二、oracle共享原理:ORACLE將執(zhí)行過的SQL語句存放在內(nèi)存的共享池(sharedbufferpool)中,可以被所有的數(shù)據(jù)庫用戶共享當(dāng)你執(zhí)行一個SQL語句(有時被稱為一個游標(biāo))時,如果它和之前的執(zhí)行過的語句完全相同,ORACLE就能很快獲得已經(jīng)被解析的語句以及最好的執(zhí)行路徑.這個功能大大地提高了SQL的
3、執(zhí)行性能并節(jié)省了內(nèi)存的使用三、oracle語句提高查詢效率的方法:1:nin(select*from......子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、ax(總成績)asmax總成績篇二:SQL語句執(zhí)行順序一、sql語句的執(zhí)行步驟:1)語法分析,分析語句的語法是否符合規(guī)范,衡量語句中各表達式的意義。2)語義分析,檢查語句中涉及的所有數(shù)據(jù)庫對象是否存在,且用戶有相應(yīng)的權(quán)限。3)視圖轉(zhuǎn)換,將涉及視圖的查詢語句轉(zhuǎn)換為相應(yīng)的對基表查詢語句。4)表達式轉(zhuǎn)換,將復(fù)雜的SQL表達式轉(zhuǎn)換為較簡單的等效連接表達式。5)選擇
4、優(yōu)化器,不同的優(yōu)化器一般產(chǎn)生不同的“執(zhí)行計劃”6)選擇連接方式,有三種連接方式,對多表連接ORACLE可選擇適當(dāng)?shù)倪B接方式。7)選擇連接順序,對多表連接ORACLE選擇哪一對表先連接,選擇這兩表中哪個表做為源數(shù)據(jù)表。8)選擇數(shù)據(jù)的搜索路徑,根據(jù)以上條件選擇合適的數(shù)據(jù)搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。9)運行“執(zhí)行計劃”二、oracle共享原理:ORACLE將執(zhí)行過的SQL語句存放在內(nèi)存的共享池(sharedbufferpool)中,可以被所有的數(shù)據(jù)庫用戶共享當(dāng)你執(zhí)行一個SQL語句
5、(有時被稱為一個游標(biāo))時,如果它和之前的執(zhí)行過的語句完全相同,ORACLE就能很快獲得已經(jīng)被解析的語句以及最好的執(zhí)行路徑.這個功能大大地提高了SQL的執(zhí)行性能并節(jié)省了內(nèi)存的使用三、oracle語句提高查詢效率的方法:1:nin(select*from......子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);2、esetcolumnName=variable,variable=variable+1先執(zhí)行variabl
6、e=variable+1,再執(zhí)行columnName=variable2.如果有多個A類(或B類)表達式,按從左到右順序執(zhí)行A類(或B類)表達式。例:updatetablenamesetcolumnName=variable,variable=variable+1,variable=2*variable先執(zhí)行variable=variable+1,再執(zhí)行variable=2*variable,最后執(zhí)行columnName=variable3.列名所代表的值永遠是原值。例:updatetablenam
7、esetcolumnName=colunName+1,columnNameBagroupby在select語句中可以使用groupby子句將行劃分成較小的組,然后,使用聚組函數(shù)返回每一個組的匯總信息,另外,可以使用having子句限制返回的結(jié)果集。groupby子句可以將查詢結(jié)果分組,并返回行的匯總信息Oracle按照groupby子句中指定的表達式的值分組查詢結(jié)果。在帶有g(shù)roupby子句的查詢語句中,在select列表中指定的列要么是groupby子句中指定的列,要么包含聚組函數(shù)selectma
8、x(sal),jobempgroupbyjob;(注意max(sal),job的job并非一定要出現(xiàn),但有意義)查詢語句的select和groupby,having子句是聚組函數(shù)唯一出現(xiàn)的地方,在(sal)fromemp(sal)>8500orderbydeptno;當(dāng)在gropuby子句中使用having子句時,查詢結(jié)果中只返回滿足having條件的組。在一個sql語句中可以有empgroupbydeptno,job;OracleSQL性能優(yōu)化技巧1.選用適合