【问题标题】:Inline Query vs Stored Procedures to use in PHP在 PHP 中使用的内联查询与存储过程
【发布时间】:2011-01-12 02:18:33
【问题描述】:

我一直在我的应用程序模型中使用内联查询语句...到目前为止,很多人说存储过程将是一个很好的做法...我有以下问题

  • 如何在PHP Codeigniter中使用MySql存储过程?

  • 使用Mysql存储过程有什么好处?

【问题讨论】:

  • “存储过程”或“准备好的语句”或两者兼而有之?

标签: php mysql codeigniter stored-procedures


【解决方案1】:

我并不是说存储过程一定是所有事情的答案。但是,不需要使用游标。我同意游标是一个障碍(慢),因此只应在绝对必要时使用。根据我的经验,游标仅用于设计不良(未规范化)的数据库,通常是因为普通查询无法根据需要提取数据。

我的背景是 .NET,我会说存储过程是查询数据库的绝对最佳方式。我认为这部分是因为 ASP.NET 旨在为它们提供便利。它在数据和代码之间提供了很好的分离——您编写一个存储过程来返回您需要的数据,然后对其进行测试。现在我刚刚进入 php,所以我不能推荐最佳实践。这可能取决于您项目的具体情况(规模、复杂性等)。

但不要因为错误信息而打折存储过程。存储过程并不一定意味着使用缓慢、昂贵的游标。除了设置输出参数外,它们基本上使用任何 SQL 查询使用的所有相同语句和逻辑。您不需要学习特殊的“粗略”逻辑。

【讨论】:

    【解决方案2】:

    存储过程是一种工具,就像其他任何东西(触发器、视图等)一样,只能在适合该工具的地方使用。将您拥有的每条内联 SQL 语句转换为存储过程并不是正确的方向。

    存储过程是使用非常粗略的逻辑编写的,并且使用游标循环数据集,当您习惯 PHP 处理逻辑的能力时,这将成为一个障碍。

    我参与过的唯一一个使用 SP 的项目是一个大型会计系统,其中数十万条记录必须经常更新,而几乎没有直接来自代码的输入。我们基本上只是告诉它何时开始并且不需要将值传递给 SP(尽管可以这样做)。然而,这只是我们在系统中使用的数千个内联查询中的一两个。我并不是说这是唯一可以使用它们的地方,但我已经构建了一些非常大的系统并且还没有“需要”在其他地方使用它们。

    在我看来,最好花时间学习编写高速、低阻力的内联查询并使用 EXPLAIN 来验证您是否正确设置了索引。我认为除非您对存储过程有非常特殊的需求,否则您会发现它们对日常使用非常不友好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-28
      • 2012-08-18
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多