我试图了解MySQL JDBC驱动程序中客户端仿真准备语句的工作原理。
第1部分 我在网上读到,对于预处理语句,关系数据库处理JDBC / SQL查询时涉及四个步骤,它们如下所示:
步骤的预执行编译SQL语句,因此提供预优化。 对于服务器端预处理语句,将对数据库进行额外的往返以预编译SQL语句。
问题 如果客户端仿真准备语句不进行数据库往返,它如何执行步骤3?或者客户端仿真准备语句的工作方式不同吗?
第2部分 我也做过两次实验。
两个实验都显示出性能方面的改善,例如响应时间。实验1的改进率约为18%,实验2的改进率约为30%。
问题
感谢您的帮助!
答案 0 :(得分:3)
简单回答:事实并非如此。 MySQL驱动程序 - 默认情况下 - 将只执行从参数化查询和(转义)参数值创建的查询字符串。它将在本地创建此查询,方法是将参数占位符替换为转义值,然后将其发送到服务器
请注意,JDBC并不要求PreparedStatement
实际上是服务器端,也不是“提高”性能。 JDBC只要求它们工作;如:您可以使用?
指定查询作为参数占位符,并且驱动程序将使用通过setXXX
方法设置的值正确执行该语句。
另请注意,MySQL确实有服务器端预处理语句,但您需要使用值为useServerPrepStmts
的连接属性true
显式启用它。