Oracle SQL語句的執(zhí)行過程詳解
http://database.51cto.com/art/200511/12457.htm在Oracle SQL語句的執(zhí)行過程中,Oracle數(shù)據(jù)庫的內(nèi)部分析原理,即 ,當(dāng)某個(gè)用戶***次提交關(guān)于Oracle SQL表達(dá)式的時(shí)候,Oracle就會(huì)將這SQL語句進(jìn)行Hard parse,這過程有點(diǎn)像程序編譯,檢查語法、表名、字段名等相關(guān)信息(如下圖),這過程會(huì)花比較長的時(shí)間,因?yàn)樗治稣Z句的語法與語義。
然后獲得***化后的執(zhí)行計(jì)劃(sql plan),并在內(nèi)存中分配一定的空間保存該語句與對(duì)應(yīng)的執(zhí)行計(jì)劃等信息。
當(dāng)用戶第二次請(qǐng)求或多次請(qǐng)求時(shí),Oracle會(huì)自動(dòng)找到先前的語句與執(zhí)行計(jì)劃,而不會(huì)進(jìn)行Hard parse,而是直接進(jìn)行Soft parse(把語句對(duì)應(yīng)的執(zhí)行計(jì)劃調(diào)出,然后執(zhí)行),從而減少數(shù)據(jù)庫的分析時(shí)間。
注意的是:Oracle中只能完全相同的語句,包大小寫、空格、換行都要求一樣時(shí),才會(huì)重復(fù)使用以前的分析結(jié)果與執(zhí)行計(jì)劃。
分析過程如下圖:

對(duì)于大量的、頻繁訪問的Oracle SQL語句,如果不采用Bind 變量的方式,哪Oracle會(huì)花費(fèi)大量的Shared latch與CPU在做Hard parse處理,所以,要盡量提高語句的重用率,減少語句的分析時(shí)間,通過了解OracleSQL語句的分析過程可以明白Oracle的內(nèi)部處理邏輯,并在設(shè)計(jì)與實(shí)現(xiàn)上避免。
在用JDBC或其它持久化數(shù)據(jù)(如Hibernate,JDO等)操作時(shí),盡量用占位符(?)
【編輯推薦】





















