准备的语句类型

在研究 高性能Java持久性》一书中的“ 语句缓存”一章时,我有机会比较了Oracle,SQL Server,PostgreSQL和MySQL处理预准备语句的方式。

感谢Jess Balint (MySQL JDBC驱动程序贡献者),他在StackOverflow上给出了一个很好的答案 ,我设法从数据库性能的角度更好地了解MySQL如何处理已准备好的语句。

基本上,有两种准备语句的方法:在服务器端或客户端。

服务器端准备好的语句

最常见的类型是服务器端语句,它需要两次数据库往返:

  • 驱动程序提交准备请求,数据库将语句解析为查询树 ,该查询树也可以转换为预优化的树结构。 因为没有实际的绑定参数值很难构建执行计划 ,所以将执行计划推迟到语句执行后再执行
  • 执行请求包含当前绑定值,数据库将其用于将解析树转换为最佳执行计划。 执行者制定计划并构建关联的结果集。

如果数据访问逻辑未缓存准备好的语句,则额外的数据库往返实际上会损害性能。 为此,某些数据库系统不默认使用服务器端的预处理语句,而是执行客户端的语句准备。

要启用服务器端准备好的语句,必须启用useServerPrepStmts属性。

客户端准备的声明

在客户端上准备语句后,在将语句发送到数据库服务器之前,将绑定参数标记替换为实际参数值。 这样,驱动程序可以使用单个请求来获取结果集。

缓存语句

在高性能OLTP系统中,语句缓存在降低事务延迟方面起着非常重要的作用。 为了避免多次准备语句,MySQL驱动程序提供了一个客户端语句缓存。 默认情况下禁用缓存,该缓存由cachePrepStmts Connection属性激活。

对于客户端语句,可以在不同的准备语句调用之间重用标记化语句结构。 缓存绑定到数据库连接,但是当使用连接池时,物理连接的生存期跨越多个应用程序级别的事务(因此,频繁执行的语句可以从使用缓存中受益)。

对于服务器端语句,驱动程序将缓存ServerPreparedStatement以及对服务器端语句支持的检查(不允许在服务器端准备所有语句)。

缓存语句可能会对应用程序性能产生重大影响。如果您对此主题感兴趣,那么您还可以订阅“ 高性能Java持久性 ”状态通知书。

翻译自: https://www.javacodegeeks.com/2015/09/how-does-the-mysql-jdbc-driver-handle-prepared-statements.html

MySQL JDBC驱动程序如何处理准备好的语句相关推荐

  1. jdbc mysql驱动_MySQL JDBC驱动程序如何处理准备好的语句

    jdbc mysql驱动 准备的语句类型 在研究< 高性能Java持久性>一书中的" 语句缓存"一章时,我有机会比较了Oracle,SQL Server,Postgre ...

  2. 通过Spring Boot使用MySQL JDBC驱动程序

    在本文中,我将向您展示如何将MySQL数据库与Spring Boot应用程序连接. 本文使用的工具包括: Spring Boot 1.5.6版本 MySQL 5.7.X 马文 Java 8 Sprin ...

  3. mysql的驱动connect放在哪里_MySQL的JDBC驱动程序下载地址

    mm.mysql是个类型4(即纯java),符合jdbc 2规范的mysql jdbc驱动程序.当前版本为2.0 pre 5(beta)你可以从下载最新的驱动程序本文只是简单描述一下mm.mysql的 ...

  4. mysql用jdbc执行回滚吗_java – mysql jdbc不成功回滚

    我有一些 Java代码使用JDBC连接到 MySQL数据库,然后代码执行一些读操作然后单个更新,所有使用相同的连接.如果有异常,则调用connection.rollback();如果没有异常,则调用c ...

  5. Ubuntu下eclipse部署mysql jdbc驱动

    1.mysql jdbc驱动包下载地址:http://dev.mysql.com/downloads/connector/j/ 版本:mysql-connector-java-5.1.17.zip 2 ...

  6. eclipse mysql jdbc驱动_java – 如何将JDBC mysql驱动程序添加到Eclipse项目?

    这个问题在这里已经有一个答案:> How to install JDBC driver in Eclipse web project without facing java.lang.Class ...

  7. mac版eclipse连接mysql_将Eclipse连接到mysql mac os x jdbc驱动程序

    我想在学习java sql的东西时运行下面的代码,但是,我已经创建了数据库,并且从终端尝试了它的好处.将Eclipse连接到mysql mac os x jdbc驱动程序 1,我得到这个错误 java ...

  8. jdbc和mysql客户端_相同的insert语句在JDBC中报错,在mysql客户端中不报错:

    java部分代码:sql="insertintotao_user(user_email,user_qq,user_id,user_name,user_password,user_imagep ...

  9. 严重: Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。

    报错: 严重: Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它. 为防止内存泄 ...

最新文章

  1. 算法设计与分析第5章 回溯法(一)【回溯法】
  2. 支持向量机(SVM)算法
  3. opencv多线程显示的问题和解决方法
  4. (3.1)HarmonyOS鸿蒙单击事件4种写法
  5. mysql怎么加固_mysql安装及加固
  6. Angular Js对象的拷贝复制
  7. 从一个小问题洞察挣钱秘籍,却被90%的数据分析师忽略
  8. 面向对象12:==运算符和equals()方法、toString()方法
  9. Python|LeetCode习题答案汇总
  10. 地图开发技术报告(百度地图)
  11. L0/L1/L2/无穷范数
  12. 超简单 不进PE 不用U盘 自己重装电脑系统步骤
  13. 20175312陶光远 与 20175309刘雨恒 结对
  14. 手机发送短信验证码登录完整实例
  15. 中国LINUX公社(论坛)
  16. TS2532: xxx is possibly ‘undefined‘.
  17. 康威定律:产品必然是其组织沟通结构的缩影
  18. ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)
  19. 15-英特尔驱动下载安装
  20. iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束

热门文章

  1. Spring入门(一)之简介
  2. 《金色梦乡》金句摘抄(二)
  3. 笑死了,打错一个字,竟然...
  4. JavaScript实现四则运算
  5. JS中的(IIFE)(立即调用函数)
  6. python 虚拟环境_理解Python虚拟环境
  7. how to build a paper's architecture?
  8. 笨办法学习@ConditionalOnProperty 烧脑配置记录
  9. 程序员面试算法_程序员的前20个搜索和排序算法面试问题
  10. jakarta ee_适用于Java EE / Jakarta EE开发人员的Micronaut