我引用了我收到的答案的一部分 我的另一个问题:

在php/mysql世界中,我会说存储的程序是不做的

我想知道:是这样吗?为什么?为什么不?

[编辑]我的意思是这是一个一般性问题,没有考虑到特定的需求[/编辑]

有帮助吗?

解决方案

我开发并维护一个大型 PHP/MySQL 应用程序。这是我使用存储过程的经验。

随着时间的推移,我们的应用程序变得非常复杂。由于所有逻辑都在 php 端,某些操作将使用超过 100 个短查询来查询数据库。

MySQL 的速度非常快,性能仍然可以接受,但不是很好。

我们决定在最新版本的软件中将一些逻辑转移到存储过程中以进行复杂的操作。

由于我们不必在 PHP 和 MySQL 之间来回发送数据,因此我们确实获得了显着的性能提升。

我确实同意这里其他发帖者的观点,即 PL/SQL 不是一种现代语言并且难以调试。

底线:对于某些情况,存储过程是一个很好的工具。但我不建议使用它们,除非你有充分的理由。对于简单的应用程序,存储过程不值得这么麻烦。

其他提示

在 MySQL 中使用存储过程时,您经常需要使用 mysqli PHP 中的接口而不是常规接口 mysql 界面。

其原因是存储过程通常会返回多个结果集。如果是这样,mysql API 将无法处理它并且会出现错误。

mysqli 接口具有处理这些多个结果集的函数,例如 mysqli_more_结果mysqli_next_结果.

请记住,如果您从存储过程返回任何结果集,那么您需要使用这些 API,因为存储过程会为实际执行生成 1 个结果集,然后为从存储过程有意返回的每个结果集生成 1 个附加结果集。存储过程。

我通常远离存储过程,因为它会增加数据库的负载,这在 99% 的情况下是最大的瓶颈。与复制 MySQL 数据库相比,添加新的 php 服务器根本不算什么。

您是否有特定的需求促使您考虑它们?存储过程的可移植性比“普通”SQL 差得多,这通常就是人们不想使用它们的原因。另外,在编写了相当一部分 PL/SQL 后,我必须说编写代码的过程方式增加了复杂性,而且它不是很现代或可测试。在某些需要优化的特殊情况下它们可能会很方便,但我肯定会三思而后行。杰夫有 类似的意见.

这是一个主观问题。

我个人会将所有计算包含在 PHP 中,并且只真正使用 MySQL 作为表。

但是,如果您觉得使用存储过程更容易,那么无论如何,请继续使用。

我不会说“存储过程是不行的”,我会说“没有充分理由就不要使用它们”。

MySQL 存储过程的语法特别糟糕(Oracle 和 MSSQL 也很糟糕),维护它们只会使您的应用程序变得复杂。

如果您有真正的(可衡量的)理由,请务必使用存储过程,否则不要这样做。无论如何,这就是我的意见。

人们可能对 mysql 的存储过程有恐惧症,部分原因是它的功能不是非常强大(与 Postgresql 甚至 MSSQL 相比,mysql 的存储过程还远远不够)。

优点:它们使多种语言的交互变得更加容易。

如果有人说“使用存储过程不好,因为它不能移植到不同的数据库“那么这当然意味着他们认为你可能会切换数据库,这意味着他们反过来说他们认为你不应该使用 mysql。

现在很流行使用 ORM,但我个人认为 ORM 是一件坏事(问:82882)

我认为使用存储过程可以在某些应用程序中提供一些抽象,就像在任何使用相同 SQL 代码块来更新或添加相同数据的地方一样,您可以创建一个 sproc save_user($attr..... )而不是到处重复自己。

同意语法很复杂,如果您习惯 MSSQL 和 Oracle 存储过程,则存在可能会令人沮丧的差异。

您还应该注意,Mysql 5.0 版本之前不支持存储过程。 http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html 此外,存储过程在该实现中往往有点奇怪。现在 Mysql 5.1 开始流行,我看到 Mysql 存储过程的使用越来越多。

我有限地使用了存储过程,而且效果很好。我是我公司客户之一的首席开发人员,负责他们的电子商务网站。客户有一个股票系统,我们在他们的系统上实现了一组存储过程,并构建了一个API与之通信。这使我们能够抽象他们的数据库,并且他们可以在存储过程中实现逻辑。简单但很好地满足了业务需求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top