【问题标题】:How/when mysql compiles stored procedures?mysql如何/何时编译存储过程?
【发布时间】:2011-12-30 11:47:06
【问题描述】:

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

然后在阅读有关 mysq 的内容时,我偶然发现了
http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
文章基本上说每次建立新的数据库连接时都会编译存储过程。
mysql会在数据库上编译所有(至少3位数字)存储过程吗?

【问题讨论】:

  • 我会说您链接的文章回答了您的问题。
  • 是的,我也会这么说。只是我有点希望“哦,对于 mysql 5.5 及更高版本不是这样”。
  • 在您的链接文章的 cmets 中,讨论的本质是,5.5 中的情况有所改进,但并没有明显改善

标签: php mysql stored-procedures


【解决方案1】:

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

MySQL 肯定不会一次编译所有 x-100 个存储过程 - 以防万一那是您所害怕的。

但这一切都有些无关紧要 存储过程的优点是可以确保多个应用程序使用同一个数据库,以相同的方式使用它。当您的表现如此之高以至于您开始查看编译缓存以提高速度时,您就看错了地方。速度优化最好通过查询或数据库重新设计来完成。

【讨论】:

  • 数据库需要非常快。在优化了查询、数据库设计和索引之后,您还能如何进一步优化它以提高速度?
  • 更快的硬件,更大的内存缓存,更快的硬盘,其他存储引擎。当然,这是在您添加索引以加快查询等之后...还要注意锁定:当表的内容一直更改时,每次更改都会锁定它,从而阻止查询。这背后有一整套科学,如果我是你,我会提出一个新问题,而不是对 4 岁的答案添加评论,因为这个问题有很多答案。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多