首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL JDBC驱动程序中的客户端模拟准备语句

MySQL JDBC驱动程序中的客户端模拟准备语句
EN

Stack Overflow用户
提问于 2014-03-19 10:31:50
回答 1查看 1.1K关注 0票数 3

我试图了解MySQL JDBC驱动程序中客户端模拟准备语句是如何工作的。

第1部分

  1. 解析传入的SQL查询
  2. 编译SQL查询
  3. 计划/优化数据采集路径
  4. 执行优化的查询/获取和返回数据

步骤的预执行编译SQL语句,从而提供预优化。对于服务器端准备的语句,将对数据库进行一次额外的往返,以预编译SQL语句。

问题,如果客户端模拟准备语句没有往返到数据库,它如何执行步骤3?还是客户端模拟准备语句的工作方式不同?

第2部分我也做了两个实验。

  1. 实验1-为每个查询使用一个客户端准备语句
  2. 实验2-“重用”客户端为同一查询多次准备的语句

两个实验都显示了响应时间等性能的改善。实验1提高了18%左右,实验2提高了30%左右。

问题

  1. 假设客户端准备的语句仍然存在预优化,这是正确的吗?
  2. 如果是,它是以类似于服务器端(第1部分中提到的四个步骤)准备语句的方式进行预优化,还是以一种非常不同的方式进行优化?
  3. 若否,为何仍有改善?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 10:52:19

简单的回答:没有。默认情况下,MySQL驱动程序只执行从参数化查询和(转义)参数值创建的查询字符串。它将通过用转义值替换参数占位符在本地创建此查询,然后将其发送到服务器。

请注意,JDBC并不要求PreparedStatement实际上是服务器端准备的,也不要求它“改进”性能。JDBC只需要它们工作;如下所示:您可以使用?作为参数占位符指定查询,驱动程序将正确地使用通过setXXX方法设置的值来执行语句。

还请注意,MySQL确实有服务器端准备的语句,但是您需要使用带有值true的connection属性useServerPrepStmts显式地启用该语句。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22502954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档