在支持存储过程的 SQL 系统中,如果您不使用某些函数,存储过程通常会以编译和优化的形式存储在服务器上。当 SQL 文本在 PHP 或其他网页中嵌入/构造为字符串时,必须将文本发送到数据库并在执行之前进行编译。这不仅降低了数据库的效率,还使 PHP(或其他)解释器在发送之前做更多的工作,并使 Web 服务器在获取更大的页面时做更多的工作。所以我想知道为什么我从未见过在我看过的几个大型开源 Web 应用程序中使用存储过程,甚至一些仅支持 mySQL 或 MS SQL Server(两者都有存储过程)的应用程序也没有。
答案1
存储过程将您锁定在特定的 DB 平台上。例如,为 MySQL 编写的代码不会立即在 SQL Server 上运行。这会降低您的应用程序的可移植性。当然,还有更多内容:实现可移植性还需要仅使用标准数据类型,而不依赖于特定于平台的函数。实际上并非总是如此。
答案2
如果应用程序支持多个数据库,可以想象他们会为所支持的每个数据库编写存储过程。
现在,我不知道 SQL Server,但就 MySQL 而言,许多共享主机根本不允许创建存储过程和一些其他功能。