最開始 我在程序里使用SQL訪問數據庫時,都是直接用“+”將字段值嵌到SQL中。?
String?sql?
=
?
"
select?s.name?from?student?s?where?s.id='
"
?
+
?sId?
+
?
"
'
";
后來我開始使用PreparedStatement,在SQL里使用“?”標記參數,然后用setXXX方法給參數賦值。當時只知道這樣用是因為有setDate,setTimeStamp這些用“+”連接不能直接嵌入的值。
感覺PreparedStatement在性能方面應該也能快點,可能DBMS會重用,但不明底層原理。
這次《數據庫實現》課程終于讓我弄懂了:每個SQL語句都要通過 語法分析 -> 生成邏輯查詢計劃 -> 邏輯優化 -> 物理優化 等步驟生成具體的執行計劃,用PreparedStatement就可以生成一個執行計劃,以后只是參數改變(相當于執行計劃的執行環境改變),前面的四個步驟也會省略,從而提高了效率。
如果一個SQL語句要被反復多次執行,或多用戶同時操作,則應選用PreparedStatement!
版權所有 羅明