第二章 SQL命令参考-PREPARE

来源:互联网 发布:淘宝首页模板代码 编辑:程序博客网 时间:2024/05/22 04:24

PREPARE

Prepare astatement for execution.

概要

PREPARE name [(datatype [,...])] AS statement

描述

PREPARE创建一个准备好的语句,可能带有未绑定的参数。准备语句是可用于优化性能的服务器端对象。随后可以使用对其参数的绑定来执行准备好的语句。 Greenplum数据库可能会选择对同一准备语句的不同执行情况的查询进行复制。

Prepared语句可以使用参数:在执行语句时被替换的值。当创建准备好的语句时,请参考按位置的参数,使用$ 1,$ 2等。可以指定相应的参数数据类型列表。当参数的数据类型未指定或被声明为未知时,从使用参数的上下文推断该类型(如果可能)。执行语句时,在EXECUTE语句中指定这些参数的实际值。

准备的语句仅在当前数据库会话期间持续。会话结束时,已准备好的语句被遗忘,因此必须重新使用该语句才能再次使用。这也意味着单个准备语句不能被多个同时的数据库客户端使用;然而,每个客户端都可以创建自己准备的语句来使用。可以使用DEALLOCATE命令手动清理准备好的语句。

当单个会话用于执行大量类似语句时,准备语句具有最大的性能优势。如果语句对于计划或重写是复杂的,则性能差异尤为显着,例如,如果查询涉及许多表的连接或需要应用若干规则。如果该语句的计划和重写相对简单但执行起来相对昂贵,则预处理语句的性能优势将不那么明显。

parameter

name

给这个特定的准备声明给出的任意名称。 它在单个会话中必须是唯一的,随后用于执行或取消分配先前准备好的语句。

datatype

准备语句的参数的数据类型。 如果特定参数的数据类型未指定或被指定为未知,则将从使用该参数的上下文推断出。 要在准备好的语句本身中引用参数,请使用$ 1,$ 2等。

statement

任何SELECT,INSERT,UPDATE,DELETE或VALUES语句。

Notes

在某些情况下,为准备的语句生成的查询计划将低于如果语句已经提交并正常执行的选择查询计划。 这是因为当计划语句并且计划程序尝试确定最佳查询计划时,语句中指定的任何参数的实际值将不可用。 Greenplum数据库收集关于表中数据分布的统计信息,并且可以在语句中使用常量值来猜测执行该语句的可能结果。 由于在使用参数编制准备语句时,此数据不可用,所选择的计划可能不是最佳的。 要查看Greenplum数据库已经为准备好的语句选择了查询计划,请使用EXPLAIN。

有关查询计划和Greenplum数据库收集的统计信息的更多信息,请参阅ANALYZE文档。

示例

Create a preparedstatement for an INSERT statement, andthen execute it:

PREPAREfooplan (int, text, bool, numeric) AS INSERT INTO

fooVALUES($1, $2, $3, $4);

EXECUTEfooplan(1, 'Hunter Valley', 't', 200.00);

Create a preparedstatement for a SELECT statement, and then execute it.Note that the data type of the

second parameteris not specified, so it is inferred from the context in which $2is used:

PREPAREusrrptplan (int) AS SELECT * FROM users u, logs l

WHEREu.usrid=$1 AND u.usrid=l.usrid AND l.date = $2;

EXECUTEusrrptplan(1, current_date);

 

兼容性

The SQLstandard includes a prepare statement, but it is only for use inembedded SQL. This version of the prepare statement also uses a somewhatdifferent syntax.

相关参考

EXECUTE, DEALLOCATE


原创粉丝点击