Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:编写一个只调用存储过程并传递其参数的语句值得吗_Sql_Postgresql - Fatal编程技术网

PostgreSQL:编写一个只调用存储过程并传递其参数的语句值得吗

PostgreSQL:编写一个只调用存储过程并传递其参数的语句值得吗,sql,postgresql,Sql,Postgresql,如果我们有一份准备好的声明,如: SELECT my_func($1::text, $2::int) 如果我用这个调用准备一个语句并通过准备好的语句进行调用,速度是否会提高。让我在这里引用: 准备好的语句在以下情况下具有最大的性能优势: 单个会话用于执行大量类似的任务 声明。性能差异将特别明显 如果语句的计划或重写非常复杂,则意义重大,例如 例如,如果查询涉及多个表的联接或需要 若干规则的应用。如果语句相对简单,则 计划和重写,但执行成本相对较高,性能 事先准备好的陈述的优势将不那么明显 这是

如果我们有一份准备好的声明,如:

SELECT my_func($1::text, $2::int)
如果我用这个调用准备一个语句并通过准备好的语句进行调用,速度是否会提高。

让我在这里引用:

准备好的语句在以下情况下具有最大的性能优势: 单个会话用于执行大量类似的任务 声明。性能差异将特别明显 如果语句的计划或重写非常复杂,则意义重大,例如 例如,如果查询涉及多个表的联接或需要 若干规则的应用。如果语句相对简单,则 计划和重写,但执行成本相对较高,性能 事先准备好的陈述的优势将不那么明显

这是我的。我认为它清楚地说明了在哪些条件下
PREPARE
会有好处

尽管如此,目前所有语言都提供了一种编写语句()的本地方式,因此整个机制都是在幕后为您执行的

简而言之:

  • 如果是来自客户端的一个计时器,则直接执行
  • 如果它来自应用程序并假设用户输入,则使用您的平台及其功能为安全原因做好准备
  • 如果在一个会话中多次执行语句,请使用任何方法(无论是
    PREPARE
    还是平台功能)为性能原因进行准备

不一定要加快速度,但使用预先准备好的语句也可以防止SQL注入。所以从安全的角度来看,这绝对是necessary@a_horse关于安全性的观点很好,但我不同意绝对必要的部分。如果参数是由驱动程序传递的,那么这些参数将被清除。