Php mysql如何/何时编译存储过程?

Php mysql如何/何时编译存储过程?,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我们打算使用mysql存储过程来处理一个项目的所有数据库工作。 有几个应用程序(不同的语言)使用同一个数据库,我相当肯定这些应用程序中有大量重复的SQL代码 然后,在阅读有关mysq的文章时,我偶然发现了 文章基本上说,每次建立新的数据库连接时都会编译存储过程。 mysql会编译数据库中的所有(至少3位数字)存储过程吗?否。查询和存储过程会根据需要编译,然后保存在缓存中一段时间。如果重复使用特定的存储过程,则将使用在缓存中编译的版本,但如果它不再在缓存中,则必须先编译它,就像发送到数据库的任何

我们打算使用mysql存储过程来处理一个项目的所有数据库工作。 有几个应用程序(不同的语言)使用同一个数据库,我相当肯定这些应用程序中有大量重复的SQL代码

然后,在阅读有关mysq的文章时,我偶然发现了

文章基本上说,每次建立新的数据库连接时都会编译存储过程。

mysql会编译数据库中的所有(至少3位数字)存储过程吗?

否。查询和存储过程会根据需要编译,然后保存在缓存中一段时间。如果重复使用特定的存储过程,则将使用在缓存中编译的版本,但如果它不再在缓存中,则必须先编译它,就像发送到数据库的任何其他查询一样

MySQL肯定不会一次编译所有的x-100存储过程——以防这正是您所担心的


但所有这些都有些无关紧要存储过程的优点是,您可以确保使用同一数据库的多个应用程序以相同的方式使用它。当您的性能达到一定程度,开始查看编译缓存的速度时,您看到的是错误的地方。速度优化最好通过查询或数据库重新设计来完成。

MySQL不会一次编译所有存储过程。它们将在您调用它们时按需执行,就像根据需求执行查询一样


但是,对于存储过程,数据库只编译一次查询计划,并重用已编译的过程。这种预编译可以产生显著的性能优势

我会说你链接的文章回答了你的问题。是的,我也这么说。只是我有点希望“哦,mysql的5.5版和更高版本不是这样的”。在你的链接文章的评论中,讨论的本质是,5.5版中的东西有所改进,而不是明显的SoDatabase需要盲目快速。在优化了查询、数据库设计和索引之后,还可以如何进一步优化它以提高速度?更快的硬件、更大的内存缓存、更快的硬盘驱动器和其他存储引擎。当然,这是在您添加索引以加快查询速度之后,等等。。。还要注意锁:当一个表的内容一直在更改时,每次更改它都会被锁定,从而阻塞查询。这背后有一个完整的科学,如果我是你,我会把这个问题变成一个新的问题,不会对一个4年前的答案加上评论,因为这个问题有很多答案。