18

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

在 PHP/MySQL 世界中,我会说存储过程是不可行的

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

[编辑]我的意思是这是一个一般性问题,没有特别需要[/编辑]

4

10 回答 10

23

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

随着时间的推移,我们的应用程序变得非常复杂。使用 php 端的所有逻辑,一些操作会使用 100 多个短查询来查询数据库。

MySQL 是如此之快,以至于性能仍然可以接受,但不是很好。

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

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

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

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

于 2008-09-17T15:12:32.533 回答
10

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

原因是存储过程通常会返回超过 1 个结果集。如果是这样,mysql API 无法处理它,你会得到错误。

mysqli 接口具有处理这些多个结果集的功能,例如mysqli_more_resultsmysqli_next_result等功能。

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

于 2008-09-17T15:09:03.870 回答
6

您是否有特定的需求让您考虑它们?存储过程的可移植性远不如“普通”SQL,这通常是人们不想使用它们的原因。此外,在编写了相当多的 PL/SQL 之后,我必须说编写代码的过程方式增加了复杂性,而且它不是很现代或可测试的。在某些需要优化的特殊情况下,它们可能会派上用场,但我肯定会三思而后行。杰夫也有类似的看法

于 2008-09-17T13:57:11.733 回答
6

I generally stay away from stored procedures because it adds load to the database which is 99% of the time, your biggest bottleneck. Adding a new php server is nothing compared to making your MySQL db replicate.

于 2008-09-19T03:23:17.277 回答
2

这是一个主观问题。

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

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

于 2008-09-17T13:59:52.177 回答
1

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

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

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

于 2008-09-17T14:48:05.243 回答
0

mysql 存储过程可能存在恐惧症,部分原因是它的功能不是非常强大(与 Postgresql 甚至 MSSQL 相比,mysqls 存储过程非常缺乏)。

优点:它们使从一种以上的语言与它的交互变得更容易。

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

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

于 2008-09-17T13:58:41.743 回答
0

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

同意语法是毛茸茸的,如果您习惯于 MSSQL 和 oracle sprocs,则存在可能会令人沮丧的差异。

于 2008-09-17T15:24:33.487 回答
0

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

于 2008-09-17T21:10:06.840 回答
0

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

于 2008-09-17T22:07:21.367 回答