最開始 我在程序里使用SQL訪問數(shù)據(jù)庫時(shí),都是直接用“+”將字段值嵌到SQL中。?
后來我開始使用PreparedStatement,在SQL里使用“?”標(biāo)記參數(shù),然后用setXXX方法給參數(shù)賦值。當(dāng)時(shí)只知道這樣用是因?yàn)橛?strong>setDate,setTimeStamp這些用“+”連接不能直接嵌入的值。
感覺PreparedStatement在性能方面應(yīng)該也能快點(diǎn),可能DBMS會(huì)重用,但不明底層原理。
這次《數(shù)據(jù)庫實(shí)現(xiàn)》課程終于讓我弄懂了:每個(gè)SQL語句都要通過 語法分析 -> 生成邏輯查詢計(jì)劃 -> 邏輯優(yōu)化 -> 物理優(yōu)化 等步驟生成具體的執(zhí)行計(jì)劃,用PreparedStatement就可以生成一個(gè)執(zhí)行計(jì)劃,以后只是參數(shù)改變(相當(dāng)于執(zhí)行計(jì)劃的執(zhí)行環(huán)境改變),前面的四個(gè)步驟也會(huì)省略,從而提高了效率。
如果一個(gè)SQL語句要被反復(fù)多次執(zhí)行,或多用戶同時(shí)操作,則應(yīng)選用PreparedStatement!
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||