存储过程与准备语句之间的差异?

时间:2011-09-03 23:16:49

标签: stored-procedures prepared-statement

存储过程和准备语句之间有什么区别......哪一个更好,为什么...... !!我试图谷歌但没有更好的文章......

3 个答案:

答案 0 :(得分:41)

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

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

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

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

两者都是非常有用的工具,您可能想要合并。

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

答案 1 :(得分:10)

存储过程存储在数据库中 - 具体取决于在服务器上创建它时编译并可能已经过优化的数据库(Oracle,MS SQL Server等)...

预准备语句是一个由服务器解析的语句,执行计划由服务器在运行语句时准备好执行...通常在语句运行多次时才有意义...取决于数据库服务器(Oracle等)甚至有时配置选项,这些“准备”是特定于会话或“全局”......

比较这两者时没有“更好”,因为它们具有特定的用例......

答案 2 :(得分:6)

其他答案暗示了这一点,但我想明确列出优点和缺点:

存储过程

优点:

  1. 每个查询的处理速度比直接查询更快,因为服务器会对它们进行预编译。
  2. 每个查询只需要写一次。它可以根据需要执行多次,甚至可以在不同的会话和不同的连接上执行。
  3. 允许查询包含编程结构(例如循环,条件语句和错误处理),这些编译结构不可能或仅在SQL中难以编写。
  4. CONS

    1. 需要了解数据库服务器使用的任何编程语言。
    2. 有时可能需要特殊权限才能编写或调用它们。
    3. 准备好的陈述

      赞成

      1. 与存储的例程一样,快速,因为查询是预编译的。
      2. CONS

        1. 需要使用每个连接或会话重新编译。
        2. 为了节省开销,每个准备好的语句必须多次执行(例如在循环中)。如果一个查询只执行一次,那么准备好的语句就会比你回来更多,因为服务器需要编译SQL,但也要编写准备好的语句。
        3. 对于我的钱,我每次都会使用存储过程,因为它们只需要编写和编译一次。在此之后,每次调用该过程都会节省时间,无论您是否使用新连接,以及是否在循环中调用该过程。唯一的缺点是需要花一些时间学习编程语言。如果我没有编写存储过程的权限,我会使用预准备语句,但前提是我必须在同一个会话中多次重复进行相同的查询。

          这是我在对这两种结构之间的差异进行了几个月的研究之后得出的结论。如果有人能够纠正我正在做出的错误概括,那么声誉的损失将是值得的。