【问题标题】:Stored procedures and mysql存储过程和mysql
【发布时间】:2011-10-16 11:35:26
【问题描述】:

是否值得在存储过程或代码(或单独的类)中编码。

我在某处读到存储过程的执行速度更快,因为它们位于数据库中,并且在读取 php 代码时不需要进行解释阶段。

我喜欢在一个单独的文件中编码我需要的 mysql 代码并从那里引用它。如果我使用存储过程会有所不同吗?

【问题讨论】:

    标签: php mysql database stored-procedures


    【解决方案1】:

    如果您使用存储过程,生成它们的代码将与您存储CREATE TABLE 语句的方式类似。它可能不会与您的 PHP 代码交互。存储过程在 MySQL 中的存储方式与表和视图相同 - 您很少在运行时使用代码创建它们。

    因此,只需创建一个名为 procedures.sql 的文件来编码您的存储过程并将它们加载到数据库中,就像您对 CREATE TABLE 语句所做的那样。从 SQL 文件中执行 CREATE PROCEDURE 语句后,可以将其从您的 Web 服务器中删除。它不应驻留在可通过网络访问的空间中的任何位置。

    存储过程和准备好的语句都提供了性能和安全收益。存储过程相对于准备好的语句的好处是您的数据库逻辑可以与您的应用程序代码分离。如果有必要,您可以从不同的应用程序界面执行相同的数据库操作。

    【讨论】:

    • 但是使用存储过程是否有性能和安全性收益
    • @DmitryMakovetskiyd 是的。我不是反对使用它们,只是解释它们是如何使用的。
    • 你有任何信息来源,我可以阅读如何将它们与 mysql..phpmyadmin 一起使用?
    • @DmitryMakovetskiyd 查看关于使用 SP 与准备好的语句的差异的补充说明。
    • @DmitryMakovetskiyd 我不知道任何具体的参考。 SP 通常作为 PDO 或 MySQLi 的准备好的语句执行。 `$db->prepare("CALL stored_procedure_name(?,?,?)");
    【解决方案2】:

    我最近遇到了这个问题。

    在 DB 上使用存储过程要快得多,当您创建 SP 时,它会将其编译成中间代码,它可以比在运行时解析标准 SQL 语句运行得更快。此外,SP 的最大优点是您可以传入一些参数,并且您可以让 SP 在 DB 上完成大量工作,这可以使用 IF ELSE 语句和 CASES 进行控制,这也可以保持您的应用程序和将数据库降至最低。

    SP 的最后一个优势是,您可以将 DB 实现与应用程序实现分开,这意味着如果假设您在应用程序的 10 个不同位置进行插入,那么您需要更改插入方式,您需要返回并在这 10 个不同的地方更改该插入,而如果您使用 SP 来包装插入,则可以即时更改该 SP,而应用程序不需要知道;)

    如果您已经编写了 SQL 代码的脚本,那么您几乎 75% 的时间都在编写 SP

    编辑:如果您使用 PHP MySQLi,您可能知道也可能不知道调用存储过程返回 2 个行集,而不是只返回 1 个的标准查询,但只要您知道它,这不是太大的问题来了:-)

    【讨论】:

    • 一个正确编写的 PHP 应用程序无论如何都会有一个单独的数据库抽象层。所以插入语法的改变应该仍然有一个单一的修订点。话虽如此,您仍然正确地认为 SP 执行速度更快,因此仅基于性能它们仍然是一个好主意。
    【解决方案3】:

    请参阅:http://searchsqlserver.techtarget.com/news/1052737/Why-use-stored-procedures。

    基本上,如果您将数据库逻辑保留在数据库中并且不要将您的 php 代码与 sql 混为一谈,那会更好,因为这可能很难维护。此外,由于存储过程被编译,它们的性能更好。

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多