preparedStatement

 

执行过程描述

1.执行connection.prepareStatement方法时判断serverPrepStmts为true,于是构造一个prepare的数据包(数据包中有sql),发送给MySQL服务器,服务器返回一个statementId。
2.执行executeUpdate方法时,会将statementId和参数值传给MySQL服务器(不再发送sql),由MySQL服务器执行。

 

prepareStatement为false执行过程

1.执行prepareStatement时判断prepareStatement为false,会创建一个ClientPreparedStatement对象,不会向MySQL服务器发送数据包。

2.执行executeUpdate方法时,会对设置的参数进行转义操作,最后直接将拼接好的完整SQL发送给MySQL服务器。

 

客户端和服务端PreparedStatement的执行效率

1.SQL解析时间。SQL发送到MySQL服务器后并不是直接执行的,需要先经过SQL解析、SQL优化等步骤,使用serverPrepStmts时在prepare阶段会将SQL解析,之后多次执行不会再次解析,不使用serverPreptStmts时每次执行SQL服务器都需要解析,在批量执行的时候效率会有一定的影响。

2.网络开销。使用serverPrepStmts,在prepare阶段会多一次与MySQL服务器的交互,但是执行的时候不会传SQL,只会传参数,在批量执行的时候可以减少数据传输量;使用ClientPreparedStatement不会有prepare阶段的交互开销,但是每次执行都是传输完整的SQL,数据量较大。

 

 

参考:https://zhuanlan.zhihu.com/p/661572799

posted @ 2024-08-06 16:23  大米粒汪汪叫  阅读(1)  评论(0编辑  收藏  举报