预准备语句与存储过程

如果您使用的是 php5 和 mysql5,那么与预准备语句相比,使用存储过程是否有实质性的优势?(我在某处读到你可能不会从mysql5存储的proc中获得实质性的性能提升)


答案 1

它们实际上不是一回事 - 对于存储过程,数据库逻辑驻留在数据库中。预准备语句基本上可以避免在多次调用查询时重新分析查询 - 性能优势可能会有很大差异。

选择使用其中一个实际上取决于您的具体情况。我不再真正使用存储的过程,因为我喜欢将所有逻辑放在一个地方。


答案 2

存储过程对于专业级(IE 企业级)应用程序有意义,在这些应用程序中,您可以:

  1. 希望您的数据库工程师能够优化查询以提高性能
  2. 希望将查询的复杂性抽象为简单的 API
  3. 希望您的逻辑分布,因为数据库中发生的某些事情可能是您不想向其他方公开的知识产权
  4. 希望您的逻辑是分布式的,因为这是分布式n层计算的本质
  5. 您可能希望数据库工程师或DBA在不修改应用程序代码的情况下修改模式(存储的过程,通过提供API,提供抽象层)

还有其他原因。

准备好的语句更适合在会话内完成的工作。但是,如果您花时间创建预准备语句,则基本上已经完成了创建存储过程所需的所有操作。不同之处在于,存储过程可跨多个会话使用(受制于数据库中的 GRANTS)。

我无法弄清楚的是,如果您可以选择存储proc与预准备语句,那么为什么您会为预准备语句而烦恼。大多数SP与PS的讨论似乎都集中在它们之间的差异上,而不是为什么使用一个与另一个。这似乎总是归结为“取决于你想做什么”。但是我还没有看到一个组织良好的描述:如果你需要,请使用proc,如果需要,请使用一个语句。


推荐