SQL語句的預編譯

在學習數據庫編程時,咱們都知道在執行SQL命令時,有二種選擇:mysql

可使用PreparedStatement對象,算法

也可使用Statement對象。sql

 

而熟悉JDBC編程的大俠們都會選擇使用PreparedStatement對象,主要由於使用預編譯對象PreparedStatement時,有如下幾個優勢:數據庫

 

首先是效率性編程

 PreparedStatement 能夠儘量的提升訪問數據庫的性能,咱們都知道數據庫在處理SQL語句時都有一個預編譯的過程,而預編譯對象就是把一些格式固定的SQL編譯後,存放在內存池中即數據庫緩衝池,當咱們再次執行相同的SQL語句時就不須要預編譯的過程了,只需DBMS運行SQL語句。因此當你須要執行Statement對象屢次的時候,PreparedStatement對象將會大大下降運行時間,特別是的大型的數據庫中,它能夠有效的也加快了訪問數據庫的速度。緩存

 

其次,使用PreparedStatement對象能夠大大提升代碼的可讀性和可維護性。oracle

 

MySQL支持預編譯,只是默認沒開啓。性能

 

Oracle裏面除了查詢結果集緩存外,還有SQL緩存。學習

語句緩存的好處
• ORACLE執行SQL語句時,先將SQL語句的字串經過一個哈希算法得出一個哈希值,而後檢查共享池中是否已存在這個哈希值,如有就用已緩存的執行計劃來執行這個語句(CACHE HIT 緩存命中),若沒有(CACHE MISS 緩存缺失)則需進行解析,解析須要完成下面的工做:優化

Ø 語法檢查;
Ø 語義檢查,看參考對象是否存在,類型是否正確;
Ø (若是是CBO優化模式)收集參考對象的統計;
Ø 檢查用戶的權限是否足夠;
Ø 從許多可能的執行路徑中選擇一條做爲執行計劃;
Ø 生成語句的編譯版本(P-CODE)。

• 解析是一個昂貴的操做,由於過程當中須要消耗許多資源; • 最大化CACHE HIT是調整共享池的目標

相關文章
相關標籤/搜索