小编Sla*_*mir的帖子

调用存储过程的 MySQL 开销

在 Java 中,我们通过 JDBC 访问 MySQL (v5.5.40)——一个准备语句,设置参数然后调用存储过程。似乎每个 execute() 在实际 SP 调用之前都有 4 个元调用(每个 MySQL 查询日志)的开销:

SELECT name, type, comment FROM mysql.proc WHERE name like...
SHOW FUNCTION STATUS LIKE 'sp_one'
SHOW PROCEDURE STATUS LIKE 'sp_one'
SHOW CREATE PROCEDURE `db-name`.`sp_one`
CALL sp_one()
Run Code Online (Sandbox Code Playgroud)

这是服务器端的预期行为吗?只是看起来效率不高。

以下是我们如何使用 API 的示例:

  conn = DriverManager.getConnection(..);

  stmt = conn.prepareCall("{call sp_one(?,?)}");

  stmt.setString(1, "a");
  stmt.setString(2, "b");

  stmt.execute();
Run Code Online (Sandbox Code Playgroud)

请注意以下情况是正确的:

  • 未使用 CallableStatement.getMetadata()
  • 参数按索引访问,而不是按名称访问

谢谢!

mysql stored-procedures jdbc mysql-5.5

5
推荐指数
1
解决办法
1980
查看次数

标签 统计

jdbc ×1

mysql ×1

mysql-5.5 ×1

stored-procedures ×1