我试图了解 MySQL JDBC 驱动程序中的客户端仿真准备语句是如何工作的。
Part 1 我在网上看到,对于prepared statements,关系数据库处理JDBC/SQL查询时涉及四个步骤,它们如下:
- 解析传入的 SQL 查询
- 编译 SQL 查询
- 规划/优化数据采集路径
- 执行优化查询/获取并返回数据
步骤的预执行编译 SQL 语句并因此提供预优化。对于服务器端准备好的语句,将对数据库进行额外的往返以预编译 SQL 语句。
问题 如果客户端模拟准备好的语句不往返数据库,它如何执行步骤 3?还是客户端仿真准备好的语句的工作方式不同?
Part 2 我也做了两个实验。
- 实验 1 - 为每个查询使用一个客户端准备好的语句
- 实验 2 - 多次为同一查询“重用”客户端准备好的语句
这两个实验都显示了响应时间等性能的改进。实验 1 提高了约 18%,实验 2 提高了约 30%。
问题
- 我是否正确假设客户端准备语句仍然存在预优化?
- 如果是,它是否以类似于服务器端(第 1 部分中提到的四个步骤)预处理语句的方式进行预优化,还是以非常不同的方式进行预优化?
- 如果没有,为什么还有改善?
谢谢你的帮助!