#{}和${}區別以及PreparedStatement預編譯理解

一.mysql如何開啓預編譯

Mysql是默認 沒有開啓預編譯的,須要在配置中加上

jdbc:mysql://xxx.22.11.31:3306/dbname?useServerPrepStmts=truemysql

JDBC中使用PreparedStatement來抽象預編譯語句,從而使用達到預編譯效果。sql

1:預編譯階段能夠對sql語句進行優化。

預編譯能夠將多個操做步驟合併成一個步驟,通常而言,越複雜的sql,編譯程度也會複雜,難度大,耗時,費性能,而預編譯能夠合併這些操做,預編譯以後DBMS能夠省去編譯直接運行sql。數據庫

2:預編譯語句能夠重複利用。

把一個 sql 預編譯後產生的 PreparedStatement 對象緩存下來,下次對於同一個sql,能夠直接使用這個緩存的 PreparedState 對象。有興趣的能夠查看mysql驅動包裏面的ConnectionImpl類是如何操做預編譯的,這裏提一下緩存PreparedStatement,在執行預編譯時會先去判斷是否存在緩存,若是存在則對參數清空,綁定新的參數。若是不存在則調用數據庫進行預編譯處理生成一個PreparedStatement對象。緩存

那若是按照默認不開啓預編譯的話,會是什麼狀況? 每次JDBC都須要編譯sql,性能

相關文章
相關標籤/搜索