背景

本文重點(diǎn)講述MySQL中的預(yù)編譯語句并從MySQL的Connector/J源碼出發(fā)講述其在Java語言中相關(guān)使用。
注意:文中的描述與結(jié)論基于MySQL 5.7.16以及Connect/J 5.1.42版本。

預(yù)編譯語句是什么

通常我們的一條sql在db接收到最終執(zhí)行完畢返回可以分為下面三個過程:

  1. 詞法和語義解析

  2. 優(yōu)化sql語句,制定執(zhí)行計(jì)劃

  3. 執(zhí)行并返回結(jié)果

我們把這種普通語句稱作Immediate Statements。

但是很多情況,我們的一條sql語句可能會反復(fù)執(zhí)行,或者每次執(zhí)行的時候只有個別的值不同(比如query的where子句值不同,update的set子句值不同,insert的values值不同)。
如果每次都需要經(jīng)過上面的詞法語義解析、語句優(yōu)化、制定執(zhí)行計(jì)劃等,則效率就明顯不行了。

所謂預(yù)編譯語句就是將這類語句中的值用占位符替代,可以視為將sql語句模板化或者說參數(shù)化,一般稱這類語句叫Prepared Statements或者Parameterized Statements
預(yù)編譯語句的優(yōu)勢在于歸納為:一次編譯、多次運(yùn)行,省去了解析優(yōu)化等過程;此外預(yù)編譯語句能防止sql注入。
當(dāng)然就優(yōu)化來說,很多時候最優(yōu)的執(zhí)行計(jì)劃不是光靠知道sql語句的模板就能決定了,往往就是需要通過具體值來預(yù)估出成本代價(jià)。

MySQL服務(wù)端預(yù)編譯

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式