数据库
首页 > 数据库> > java-MySQL JDBC驱动程序中的客户端仿真准备语句

java-MySQL JDBC驱动程序中的客户端仿真准备语句

作者:互联网

我试图了解MySQL JDBC驱动程序中的客户端仿真准备语句如何工作.

第1部分
我在线阅读了有关准备好的语句的信息,当关系数据库处理JDBC / SQL查询时涉及四个步骤,它们分别如下:

>解析传入的SQL查询
>编译SQL查询
>计划/优化数据采集路径
>执行优化的查询/获取并返回数据

步骤的预执行将编译SQL语句,因此提供了预优化.
对于服务器端准备好的语句,将对数据库进行一次额外的往返操作以预编译SQL语句.


如果客户端仿真准备好的语句没有往返数据库,该如何执行步骤3?还是客户端仿真准备好的语句工作不同?

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

>实验1-对每个客户端使用一个客户端准备好的语句
询问
>实验2-为“重新使用”客户端准备好的语句
多次相同的查询

这两个实验都显示出性能的改善,例如响应时间.实验1的改进约18%,实验2的改进约30%.

>我是否可以假设仍存在针对
客户端准备好的语句?
>如果是,是否以类似于服务器端的方式进行预优化
(第1部分中提到的四个步骤)准备好的语句或
有很多不同的方式吗?
>如果没有,为什么还有改进?

谢谢你的帮助!

解决方法:

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

请注意,JDBC不需要在服务器端实际准备PreparedStatement,也不需要“提高”性能. JDBC仅要求它们可以工作;如:您可以使用?指定查询作为参数占位符,驱动程序将使用通过setXXX方法设置的值正确执行语句.

还要注意,MySQL确实具有服务器端准备好的语句,但是您需要使用连接属性useServerPrepStmts并将其值为true来显式启用它.

标签:jdbc,prepared-statement,java,mysql,connector-j
来源: https://codeday.me/bug/20191122/2055897.html