mysql preparedStatement预编译

Java中连结MySQL启用预编译的先决条件是useServerPstmts=true.
同时相关联的参数为: cachePrepStmts=true,开启预编译缓存.

1, 没有开启预编译的执行和数据结构

mysql preparedStatement预编译_第1张图片

2,使用mysql server的预编译

mysql preparedStatement预编译_第2张图片

通过mysql general log可以看出来:

161228 13:24:35    17 Connect   vddl@localhost on test
                   17 Query /* mysql-connector-java-5.1.34 ( Revision: [email protected] ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'license' OR Variable_name = 'init_connect'
           17 Query /* mysql-connector-java-5.1.34 ( Revision: [email protected]20141014163213-wqbwpf1ok2kvo1om ) */SELECT @@session.auto_increment_increment
                   17 Query SET NAMES latin1
                   17 Query SET character_set_results = NULL
                   17 Query SET autocommit=1
161228 14:13:18    17 Prepare   select NO,name from student where NO = ?
161228 14:55:29    17 Execute   select NO,name from student where NO = '1000002'

最后两行可以看到是mysql server服务端执行了 prepare/execute命令。

服务端在prepare响应中,返回一个编译后的statment id,下次execute执行时直接传递statement id和参数值,不需要传递原始sql string串。

mysql这两个命令协议官方文档:
http://dev.mysql.com/doc/internals/en/com-stmt-prepare.html

3,参照

https://www.zybuluo.com/stefanlu/note/254899
http://cs-css.iteye.com/blog/1847772

更多客户端connector/j 参数,影响到性能的:
http://assets.en.oreilly.com/1/event/21/Connector_J%20Performance%20Gems%20Presentation.pdf

你可能感兴趣的:(mysql preparedStatement预编译)