(服务器端)准备好的语句对MySQL 5.5+;查询计划

(服务器端)准备好的语句对MySQL 5.5+;查询计划,mysql,performance,Mysql,Performance,因此,由于粗略的谷歌搜索并没有揭示任何有启发性的东西: MySQL如何为准备好的语句生成查询计划,例如在Connector/J for JDBC中实现的服务器端语句?具体地说,它是在编译SQL语句时生成它,然后在每次执行时重用它,而不管参数是什么,还是会以与单独发出每个SQL查询相同的方式实际调整计划 如果它确实“聪明”,那么解释一下它是如何做到这一点的(例如变量窥视)在几乎所有情况下,查询计划都是在执行语句时生成的。在MySQL中(与竞争产品不同),构建计划的速度非常快,因此您不必担心它是否以

因此,由于粗略的谷歌搜索并没有揭示任何有启发性的东西:

MySQL如何为准备好的语句生成查询计划,例如在Connector/J for JDBC中实现的服务器端语句?具体地说,它是在编译SQL语句时生成它,然后在每次执行时重用它,而不管参数是什么,还是会以与单独发出每个SQL查询相同的方式实际调整计划


如果它确实“聪明”,那么解释一下它是如何做到这一点的(例如变量窥视)

在几乎所有情况下,查询计划都是在执行语句时生成的。在MySQL中(与竞争产品不同),构建计划的速度非常快,因此您不必担心它是否以任何方式缓存

此外,但根据需要构建,查询中的不同值可能导致不同的查询计划,因此执行速度更快


(在极端情况下,我看到一个语句,具有不同的常量,有6个不同的查询计划。)

您是要求
SELECT
类型的查询还是?这有关系吗?任何具有某种查找功能的查询都需要一个查询计划。当您说“一条语句”时,您指的是预编译为准备好的语句的语句,还是每次发送到服务器执行的可读SQL?我的问题特别涉及SQL语句的服务器端缓存。我认为没有任何服务器端缓存,除了存储例程(每个连接编译一次)中的缓存。请参阅Connector/J for MySQL中的
UseServerPrepsmts
选项。