Stored procedures 存储过程和准备好的语句之间的区别?

Stored procedures 存储过程和准备好的语句之间的区别?,stored-procedures,prepared-statement,Stored Procedures,Prepared Statement,存储过程和准备好的语句之间有什么区别。。。哪一个更好,为什么。。。!!我试着用谷歌搜索它,但没有更好的文章…一个存储过程存储在数据库中-取决于哪个数据库(Oracle、MS SQL Server等)被编译,并且在服务器上创建时可能会进行优化 准备好的语句是由服务器解析的语句,服务器创建执行计划,以便在运行该语句时随时执行。。。通常,当一个语句被多次运行时,它是有意义的。。。根据数据库服务器(Oracle等)和有时的配置选项,这些“准备”是特定于会话的或“全局的” 当您比较这两种语言时,没有“更好

存储过程和准备好的语句之间有什么区别。。。哪一个更好,为什么。。。!!我试着用谷歌搜索它,但没有更好的文章…

一个存储过程存储在数据库中-取决于哪个数据库(Oracle、MS SQL Server等)被编译,并且在服务器上创建时可能会进行优化

准备好的语句是由服务器解析的语句,服务器创建执行计划,以便在运行该语句时随时执行。。。通常,当一个语句被多次运行时,它是有意义的。。。根据数据库服务器(Oracle等)和有时的配置选项,这些“准备”是特定于会话的或“全局的”


当您比较这两种语言时,没有“更好”的了,因为它们有自己的特定用例…

存储过程是PL/SQL语言中的一系列指令。是一种由某些DBMS实现的编程语言,它允许您存储经常应用于模型的查询序列,并与应用层共享处理负载

准备语句是使用占位符而不是实际值编写的查询。您编写查询,DBMS只编译一次,然后您只需将值传递到占位符中。使用预先准备好的语句的优点是可以显著提高性能,并保护应用程序免受SQL注入的影响

不同之处在于,您无法存储准备好的语句。每次需要执行时,都必须“准备”它们。另一方面,存储过程可以被存储,并与模式相关联,但是您需要知道PL/SQL来编写它们

您必须检查您的DBMS是否支持它们

两者都是非常有用的工具,您可能希望将它们结合起来


希望这个简短的解释对你有用

其他答案已经暗示了这一点,但我想明确列出利弊:

存储过程

优点:

  • 每个查询的处理速度都比直接查询快,因为服务器预先编译它们
  • 每个查询只需编写一次。它可以根据需要执行任意多次,甚至可以跨不同会话和不同连接执行
  • 允许查询包含无法或难以单独用SQL编写的编程结构(如循环、条件语句和错误处理)
  • 缺点

  • 需要了解数据库服务器使用的任何编程语言
  • 有时可能需要特殊权限才能写入或调用它们
  • 准备好的声明

    专业人士

  • 与存储的例程一样,查询也是预编译的,因此速度很快
  • 缺点

  • 每个连接或会话都需要重新编译
  • 为了节省开销,每个准备好的语句必须执行多次(例如在循环中)。如果一个查询只执行一次,那么准备准备好的语句所需的开销要比返回的开销大,因为服务器无论如何都需要编译SQL,但也需要生成准备好的语句
  • 就我个人而言,我每次都会使用存储过程,因为它们只需要编写和编译一次。之后,无论您是否在新连接上,无论您是否在循环中调用该过程,对该过程的每次调用都会节省时间。唯一的缺点是需要花一些时间学习编程语言。如果我没有编写存储过程的权限,我会使用预先准备好的语句,但前提是我必须在同一会话中多次重复执行同一查询


    这是我经过几个月的断断续续地研究这两种结构之间的差异后得出的结论。如果有人能够纠正我所做的错误概括,那么声誉损失是值得的。

    这个答案对我来说最有意义。在IBM站点上,它声明,正如您所做的那样,
    [存储过程]…将加快执行速度,因为存储过程中包含的SQL语句是在创建存储过程时准备和优化的。
    除了批量插入,我无法理解准备好的语句的价值,因为它们只与脚本一样长,必须在下次调用时重新准备。我正在寻找类似SQLite prepare_v3的东西,而存储过程似乎是最接近的。谢谢