每次运行PreparedStatement时,MySQL Server都会连接表吗?

时间:2014-03-12 18:23:01

标签: mysql sql optimization prepared-statement

我正在使用PreparedStatement加入。现在我的问题是:

MySQL服务器是否每次都会再次加入这两个表,例如,在一批1000个相同的prepareStatements中?

3 个答案:

答案 0 :(得分:2)

  

mysql Server是否每次都会再次连接这两个表

  

在一批1000个相同的准备好的陈述中

如果您正在运行一批1000个连接,那么您显然做错了。

答案 1 :(得分:1)

是的,每次执行语句时,服务器都会重新执行查询,并且必须重做连接。

服务器不应该做的是重新解析并重新规划查询。

答案 2 :(得分:-1)

MySQL确实有一个查询缓存,因此在某些情况下可以提供缓存结果。这是链接

我会在这里查看更多信息。

http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

包含有关查询缓存的预准备语句的说明

  

使用mysql_stmt_prepare()和mysql_stmt_execute()(参见第22.8.8节“C API准备语句”)使用二进制协议发出的预准备语句受缓存限制。与查询缓存中的语句比较是基于扩展后的语句文本?参数标记。该语句仅与使用二进制协议执行的其他缓存语句进行比较。也就是说,对于查询缓存目的,使用二进制协议发布的预准备语句与使用文本协议发布的预准备语句不同(请参见第13.5节“准备语句的SQL语法”)。

我可能会因为你说“相同”的准备陈述而感到困惑。如果这些准备好的语句都解析为不同的查询,那么每次都会发生连接。

但是,如果这些准备好的语句中的任何一个解析为与之前相同的查询,那么结果可能会被缓存(受文档限制),然后不需要重做连接。