Oracle SQL語句的執行過程詳解
http://database.51cto.com/art/200511/12457.htm在Oracle SQL語句的執行過程中,Oracle數據庫的內部分析原理,即 ,當某個用戶***次提交關于Oracle SQL表達式的時候,Oracle就會將這SQL語句進行Hard parse,這過程有點像程序編譯,檢查語法、表名、字段名等相關信息(如下圖),這過程會花比較長的時間,因為它要分析語句的語法與語義。
然后獲得***化后的執行計劃(sql plan),并在內存中分配一定的空間保存該語句與對應的執行計劃等信息。
當用戶第二次請求或多次請求時,Oracle會自動找到先前的語句與執行計劃,而不會進行Hard parse,而是直接進行Soft parse(把語句對應的執行計劃調出,然后執行),從而減少數據庫的分析時間。
注意的是:Oracle中只能完全相同的語句,包大小寫、空格、換行都要求一樣時,才會重復使用以前的分析結果與執行計劃。
分析過程如下圖:
對于大量的、頻繁訪問的Oracle SQL語句,如果不采用Bind 變量的方式,哪Oracle會花費大量的Shared latch與CPU在做Hard parse處理,所以,要盡量提高語句的重用率,減少語句的分析時間,通過了解OracleSQL語句的分析過程可以明白Oracle的內部處理邏輯,并在設計與實現上避免。
在用JDBC或其它持久化數據(如Hibernate,JDO等)操作時,盡量用占位符(?)
【編輯推薦】