好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > MySQL預(yù)編譯功能詳解

MySQL預(yù)編譯功能詳解

熱門(mén)標(biāo)簽:百度地圖標(biāo)注地方備注 好搜地圖標(biāo)注 龍圖酒吧地圖標(biāo)注 電銷(xiāo)機(jī)器人價(jià)格多少錢(qián)一臺(tái) 400電話(huà)申請(qǐng)什么好 怎么辦理400電話(huà)呢 電話(huà)機(jī)器人免費(fèi)嗎 怎么申請(qǐng)400電話(huà)申請(qǐng) 地圖標(biāo)注圖標(biāo)素材入駐

本文為大家分享了MySQL預(yù)編譯功能,供大家參考,具體內(nèi)容如下

1、預(yù)編譯的好處

  大家平時(shí)都使用過(guò)JDBC中的PreparedStatement接口,它有預(yù)編譯功能。什么是預(yù)編譯功能呢?它有什么好處呢?
  當(dāng)客戶(hù)發(fā)送一條SQL語(yǔ)句給服務(wù)器后,服務(wù)器總是需要校驗(yàn)SQL語(yǔ)句的語(yǔ)法格式是否正確,然后把SQL語(yǔ)句編譯成可執(zhí)行的函數(shù),最后才是執(zhí)行SQL語(yǔ)句。其中校驗(yàn)語(yǔ)法,和編譯所花的時(shí)間可能比執(zhí)行SQL語(yǔ)句花的時(shí)間還要多。
  如果我們需要執(zhí)行多次insert語(yǔ)句,但只是每次插入的值不同,MySQL服務(wù)器也是需要每次都去校驗(yàn)SQL語(yǔ)句的語(yǔ)法格式,以及編譯,這就浪費(fèi)了太多的時(shí)間。如果使用預(yù)編譯功能,那么只對(duì)SQL語(yǔ)句進(jìn)行一次語(yǔ)法校驗(yàn)和編譯,所以效率要高。

2、MySQL執(zhí)行預(yù)編譯

MySQL執(zhí)行預(yù)編譯分為如三步:
執(zhí)行預(yù)編譯語(yǔ)句,例如:prepare myfun from 'select * from t_book where bid=?'
設(shè)置變量,例如:set @str='b1'
執(zhí)行語(yǔ)句,例如:execute myfun using @str
如果需要再次執(zhí)行myfun,那么就不再需要第一步,即不需要再編譯語(yǔ)句了:
設(shè)置變量,例如:set @str='b2'
執(zhí)行語(yǔ)句,例如:execute myfun using @str
通過(guò)查看MySQL日志可以看到執(zhí)行的過(guò)程:

3、使用Statement執(zhí)行預(yù)編譯

使用Statement執(zhí)行預(yù)編譯就是把上面的SQL語(yǔ)句執(zhí)行一次。

Connection con = JdbcUtils.getConnection();
Statement stmt = con.createStatement();
stmt.executeUpdate("prepare myfun from 'select * from t_book where bid=?'");
stmt.executeUpdate("set @str='b1'");
ResultSet rs = stmt.executeQuery("execute myfun using @str");
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

stmt.executeUpdate("set @str='b2'");
rs = stmt.executeQuery("execute myfun using @str");

while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.close();
stmt.close();
con.close();

4、useServerPrepStmts參數(shù)

  默認(rèn)使用PreparedStatement是不能執(zhí)行預(yù)編譯的,這需要在url中給出useServerPrepStmts=true參數(shù)(MySQL Server

4.1之前的版本是不支持預(yù)編譯的,而Connector/J在5.0.5以后的版本,默認(rèn)是沒(méi)有開(kāi)啟預(yù)編譯功能的)。

  例如:jdbc:mysql://localhost:3306/test?useServerPrepStmts=true
  這樣才能保證mysql驅(qū)動(dòng)會(huì)先把SQL語(yǔ)句發(fā)送給服務(wù)器進(jìn)行預(yù)編譯,然后在執(zhí)行executeQuery()時(shí)只是把參數(shù)發(fā)送給服務(wù)器。

Connection con = JdbcUtils.getConnection();
String sql = "select * from t_book where bid=?";
PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, "b1");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

pstmt.setString(1, "b2");
rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.close();
pstmt.close();
con.close();

5、cachePrepStmts參數(shù)

  當(dāng)使用不同的PreparedStatement對(duì)象來(lái)執(zhí)行相同的SQL語(yǔ)句時(shí),還是會(huì)出現(xiàn)編譯兩次的現(xiàn)象,這是因?yàn)轵?qū)動(dòng)沒(méi)有緩存編譯后的函數(shù)key,導(dǎo)致二次編譯。如果希望緩存編譯后函數(shù)的key,那么就要設(shè)置cachePrepStmts參數(shù)為true。例如:
  jdbc:mysql://localhost:3306/test?useServerPrepStmts=truecachePrepStmts=true

Connection con = JdbcUtils.getConnection();
String sql = "select * from t_book where bid=?";
PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, "b1");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

pstmt = con.prepareStatement(sql);
pstmt.setString(1, "b2");
rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.close();
pstmt.close();
con.close();


6、打開(kāi)批處理

MySQL的批處理也需要通過(guò)參數(shù)來(lái)打開(kāi):rewriteBatchedStatements=true

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • mysqli預(yù)處理編譯的深入理解
  • 源碼編譯安裝MySQL8.0.20的詳細(xì)教程
  • CentOS8部署LNMP環(huán)境之編譯安裝mysql8.0.29的教程詳解
  • linux下使用cmake編譯安裝mysql的詳細(xì)教程
  • 一文搞懂MySQL預(yù)編譯

標(biāo)簽:溫州 浙江 撫順 防疫工作 汕尾 固原 內(nèi)江 廣西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL預(yù)編譯功能詳解》,本文關(guān)鍵詞  MySQL,預(yù),編譯,功能,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL預(yù)編譯功能詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MySQL預(yù)編譯功能詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 男生喷出精子视频在线观看| 圣女被强行扒开双腿玩弄视频 | 葵司趁夫洗澡30分钟正在播放| 禁漫?天堂?H漫画网站| 欧美伦片R级在线观看| a级国产| 揉我奶头?啊?cao我视频| 美女又爽?又黄?偷拍app| 插女生的逼| xxnx19日本| 天天摸日日摸狠狠添高潮喷| china东北粗口gaymovie| 久久久精品国产亚洲AV星空| 精品亚洲AV高清一区二区| 色戒hd版无删减| 国产精品尹人在线观看免费| xxxxtube69性中国| 午夜伦伦电影理论片大片| 精品999久久久一级毛片| 欧美成人激情视频| 办公室炙热的爱情原声激情热吻| 最近中文字幕在线MV视频下载 | 偷拍女性嘘嘘视频大全| 欧美天天在线| 很黄很刺激男同志故事| japanese色系tube护士| 黑人大战亚洲女人XXX| 超级metart裸体欣赏| 中文一区二区三区亚洲欧美| 国产又爽又黄又粗又大| 男人与禽交的方法| 任你爽任你鲁在线精品视频| 无码人妻精品一区二区蜜桃视频| 维修工人的绝遇中文字| 一本一道aV无码中文字幕﹣百度| 大学生情侣激情啪啪A片酒店| 女主播扒开内衣让粉丝看个够| 五月激情视频| 国产厨房一区二区三区| 亚洲色综合区小说区| 操人直播|